diff --git a/gc.c b/gc.c index 4eaceef80714a5..0309559481b3b7 100644 --- a/gc.c +++ b/gc.c @@ -2204,13 +2204,14 @@ heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap { GC_ASSERT(heap->free_pages == NULL); - if (is_lazy_sweeping(objspace)) { - gc_sweep_continue(objspace, size_pool, heap); - } - else if (is_incremental_marking(objspace)) { + if (is_incremental_marking(objspace)) { gc_marks_continue(objspace, size_pool, heap); } + if (heap->free_pages == NULL && is_lazy_sweeping(objspace)) { + gc_sweep_continue(objspace, size_pool, heap); + } + if (heap->free_pages == NULL && (will_be_incremental_marking(objspace) || heap_increment(objspace, size_pool, heap) == FALSE) && gc_start(objspace, GPR_FLAG_NEWOBJ) == FALSE) {