diff options
author | Peter Zhu <[email protected]> | 2023-06-05 10:54:28 -0400 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2023-06-06 10:18:50 -0400 |
commit | c3dc9fcc70514d2d74985e48ee24f7799a66899a (patch) | |
tree | 2efc9a83a04045b9c9a2bccb89dfbbbcdbb42a20 /gc.c | |
parent | 1f64301e12dbeb5c39abd3094240ef8b470ce9d4 (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.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -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)); } } |