diff options
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -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) { |