mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-05 19:50:23 +02:00
Merge remote-tracking branch 'whippet/main' into wip-whippet
This commit is contained in:
commit
8c4866cd5c
3 changed files with 10 additions and 4 deletions
|
@ -209,7 +209,8 @@ gc_visit_ephemeron_key(struct gc_edge edge, struct gc_heap *heap) {
|
||||||
if (large_object_space_contains_with_lock(lospace, ref))
|
if (large_object_space_contains_with_lock(lospace, ref))
|
||||||
return large_object_space_is_marked(lospace, ref);
|
return large_object_space_is_marked(lospace, ref);
|
||||||
|
|
||||||
GC_CRASH();
|
// Assume it is in the extern space.
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -585,9 +586,11 @@ grow_heap_if_necessary(struct gc_heap *heap,
|
||||||
struct nofl_space *nofl = heap_nofl_space(heap);
|
struct nofl_space *nofl = heap_nofl_space(heap);
|
||||||
size_t pending = nofl_space_shrink(nofl, 0);
|
size_t pending = nofl_space_shrink(nofl, 0);
|
||||||
|
|
||||||
|
// If we cannot defragment and are making no progress but have a
|
||||||
|
// growable heap, expand by 25% to add some headroom.
|
||||||
size_t needed_headroom =
|
size_t needed_headroom =
|
||||||
GC_CONSERVATIVE_TRACE
|
GC_CONSERVATIVE_TRACE
|
||||||
? nofl_active_block_count (nofl) * NOFL_BLOCK_SIZE / 16
|
? (progress ? 0 : nofl_active_block_count (nofl) * NOFL_BLOCK_SIZE / 4)
|
||||||
: 0;
|
: 0;
|
||||||
size_t headroom = nofl_empty_block_count(nofl) * NOFL_BLOCK_SIZE;
|
size_t headroom = nofl_empty_block_count(nofl) * NOFL_BLOCK_SIZE;
|
||||||
|
|
||||||
|
|
|
@ -461,7 +461,9 @@ int gc_visit_ephemeron_key(struct gc_edge edge, struct gc_heap *heap) {
|
||||||
|
|
||||||
if (large_object_space_contains_with_lock(heap_large_object_space(heap), ref))
|
if (large_object_space_contains_with_lock(heap_large_object_space(heap), ref))
|
||||||
return large_object_space_is_marked(heap_large_object_space(heap), ref);
|
return large_object_space_is_marked(heap_large_object_space(heap), ref);
|
||||||
GC_CRASH();
|
|
||||||
|
// Assume it is in the extern space.
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mutators_are_stopping(struct gc_heap *heap) {
|
static int mutators_are_stopping(struct gc_heap *heap) {
|
||||||
|
|
|
@ -278,7 +278,8 @@ int gc_visit_ephemeron_key(struct gc_edge edge, struct gc_heap *heap) {
|
||||||
} else if (large_object_space_contains_with_lock(heap_large_object_space(heap), ref)) {
|
} else if (large_object_space_contains_with_lock(heap_large_object_space(heap), ref)) {
|
||||||
return large_object_space_is_marked(heap_large_object_space(heap), ref);
|
return large_object_space_is_marked(heap_large_object_space(heap), ref);
|
||||||
}
|
}
|
||||||
GC_CRASH();
|
// Assume it is in the extern space.
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trace(struct gc_edge edge, struct gc_heap *heap, void *visit_data) {
|
static void trace(struct gc_edge edge, struct gc_heap *heap, void *visit_data) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue