1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

whippet: avoid an atomic load when visiting already-marked objects

This commit is contained in:
Andy Wingo 2024-07-10 11:47:15 +02:00
parent d50455ed1b
commit ff1e1b1d44

View file

@ -678,7 +678,8 @@ static inline int trace_edge(struct gc_heap *heap, struct gc_edge edge) {
struct gc_ref ref = gc_edge_ref(edge); struct gc_ref ref = gc_edge_ref(edge);
int is_new = do_trace(heap, edge, ref); int is_new = do_trace(heap, edge, ref);
if (GC_UNLIKELY(atomic_load_explicit(&heap->check_pending_ephemerons, if (is_new &&
GC_UNLIKELY(atomic_load_explicit(&heap->check_pending_ephemerons,
memory_order_relaxed))) memory_order_relaxed)))
gc_resolve_pending_ephemerons(ref, heap); gc_resolve_pending_ephemerons(ref, heap);