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

Fix BDW finalization; ensure pending set is marked

This commit is contained in:
Andy Wingo 2024-07-24 10:01:16 +02:00
parent c7309a9657
commit 3d4d4d047c

View file

@ -219,7 +219,7 @@ void gc_finalizer_attach(struct gc_mutator *mut, struct gc_finalizer *finalizer,
void *prev_data = NULL;
gc_finalizer_init_internal(finalizer, object, closure);
gc_finalizer_externally_activated(finalizer);
GC_REGISTER_FINALIZER_NO_ORDER(gc_ref_heap_object(object), finalize_object,
GC_register_finalizer_no_order(gc_ref_heap_object(object), finalize_object,
finalizer, &prev, &prev_data);
// FIXME: Allow multiple finalizers per object.
GC_ASSERT(prev == NULL);
@ -315,6 +315,8 @@ mark_heap(GC_word *addr, struct GC_ms_entry *mark_stack_ptr,
if (heap->roots)
gc_trace_heap_roots(heap->roots, bdw_mark_edge, heap, &state);
gc_visit_finalizer_roots(heap->finalizer_state, bdw_mark_edge, heap, &state);
state.mark_stack_ptr = GC_MARK_AND_PUSH (heap->mutators,
state.mark_stack_ptr,
state.mark_stack_limit,