summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-06-05 10:54:28 -0400
committerPeter Zhu <peter@peterzhu.ca>2023-06-06 10:18:50 -0400
commitc3dc9fcc70514d2d74985e48ee24f7799a66899a (patch)
tree2efc9a83a04045b9c9a2bccb89dfbbbcdbb42a20
parent1f64301e12dbeb5c39abd3094240ef8b470ce9d4 (diff)
Fix heap growth in GC.verify_compaction_references
We should grow by at least gc_params.heap_init_slots, but the previous calculation was incorrect.
-rw-r--r--gc.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gc.c b/gc.c
index 707754a9e5..6bbfa4e5ef 100644
--- a/gc.c
+++ b/gc.c
@@ -10846,13 +10846,13 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do
rb_size_pool_t *size_pool = &size_pools[i];
rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool);
+ size_t minimum_pages = 0;
if (RTEST(expand_heap)) {
- size_t required_pages = growth_slots / size_pool->slot_size;
- heap_add_pages(objspace, size_pool, heap, MAX(required_pages, heap->total_pages));
- }
- else {
- heap_add_pages(objspace, size_pool, heap, heap->total_pages);
+ int multiple = size_pool->slot_size / BASE_SLOT_SIZE;
+ minimum_pages = growth_slots * multiple / HEAP_PAGE_OBJ_LIMIT;
}
+
+ heap_add_pages(objspace, size_pool, heap, MAX(minimum_pages, heap->total_pages));
}
}