1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-07 04:30:18 +02:00

lospace: Rely on object_map to be immutable during collection

This avoids having multiple threads serialize through a mutex.  We still
have to allow for mutation on object_tree and remembered_edges, though.
This commit is contained in:
Andy Wingo 2025-01-23 15:06:44 +01:00
parent 7885ea1037
commit 7a9de35aaa
4 changed files with 150 additions and 136 deletions

View file

@ -135,8 +135,7 @@ do_trace(struct gc_heap *heap, struct gc_edge edge, struct gc_ref ref,
return nofl_space_evacuate_or_mark_object(heap_nofl_space(heap), edge, ref,
&data->allocator);
else if (large_object_space_contains(heap_large_object_space(heap), ref))
return large_object_space_mark_object(heap_large_object_space(heap),
ref);
return large_object_space_mark(heap_large_object_space(heap), ref);
else
return gc_extern_space_visit(heap_extern_space(heap), edge, ref);
}
@ -170,8 +169,8 @@ gc_visit_ephemeron_key(struct gc_edge edge, struct gc_heap *heap) {
return nofl_space_forward_or_mark_if_traced(nofl_space, edge, ref);
struct large_object_space *lospace = heap_large_object_space(heap);
if (large_object_space_contains(lospace, ref))
return large_object_space_is_copied(lospace, ref);
if (large_object_space_contains_with_lock(lospace, ref))
return large_object_space_is_marked(lospace, ref);
GC_CRASH();
}