diff --git a/src/gc.c b/src/gc.c index 8569cc085..8d0ad5500 100644 --- a/src/gc.c +++ b/src/gc.c @@ -941,11 +941,15 @@ clear_all_old(mrb_state *mrb) incremental_gc_until(mrb, GC_STATE_NONE); } + /* Sweep the dead objects, then reset all the live objects + * (including all the old objects, of course) to white. */ mrb->is_generational_gc_mode = FALSE; prepare_incremental_sweep(mrb); incremental_gc_until(mrb, GC_STATE_NONE); - mrb->atomic_gray_list = mrb->gray_list = NULL; mrb->is_generational_gc_mode = origin_mode; + + /* The gray objects has already been painted as white */ + mrb->atomic_gray_list = mrb->gray_list = NULL; } void