diff --git a/gc.c b/gc.c index 707754a9e5998b..6bbfa4e5ef6b1c 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)); } }