From a80e9b5bc85d669912cca11b9e707f125ce82d5c Mon Sep 17 00:00:00 2001 From: Narihiro Nakamura Date: Sun, 13 Jan 2013 18:56:23 +0900 Subject: Doesn't clear black of all marked objects in major collections. Since the minor collector doesn't need to mark these objects, the worst-case pause time is reduced. --- src/gc.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index b3e4b291c..3577db1c2 100644 --- a/src/gc.c +++ b/src/gc.c @@ -780,7 +780,7 @@ incremental_sweep_phase(mrb_state *mrb, size_t limit) } } else { - if (!is_minor_gc(mrb)) + if (!is_generational(mrb)) paint_partial_white(mrb, &p->as.basic); /* next gc target */ dead_slot = 0; } @@ -863,11 +863,10 @@ clear_all_old(mrb_state *mrb) if (is_major_gc(mrb)) { advance_phase(mrb, GC_STATE_NONE); } - else { - mrb->is_generational_gc_mode = FALSE; - prepare_incremental_sweep(mrb); - advance_phase(mrb, GC_STATE_NONE); - } + + mrb->is_generational_gc_mode = FALSE; + prepare_incremental_sweep(mrb); + advance_phase(mrb, GC_STATE_NONE); mrb->variable_gray_list = mrb->gray_list = NULL; mrb->is_generational_gc_mode = origin_mode; } -- cgit v1.2.3