From c3dc9fcc70514d2d74985e48ee24f7799a66899a Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 5 Jun 2023 10:54:28 -0400 Subject: [PATCH] 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. --- gc.c | 10 +++++----- 1 file 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)); } }