diff --git a/src/gc.c b/src/gc.c index 823297612..e5488dfcc 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1349,11 +1349,12 @@ mrb_field_write_barrier(mrb_state *mrb, struct RBasic *obj, struct RBasic *value mrb_assert(gc->state == MRB_GC_STATE_MARK || (!is_dead(gc, value) && !is_dead(gc, obj))); mrb_assert(is_generational(gc) || gc->state != MRB_GC_STATE_ROOT); - if (gc->state == MRB_GC_STATE_SWEEP) { - paint_partial_white(gc, obj); /* for never write barriers */ + if (is_generational(gc) || gc->state == MRB_GC_STATE_MARK) { + add_gray_list(mrb, gc, value); } else { - add_gray_list(mrb, gc, value); + mrb_assert(gc->state == MRB_GC_STATE_SWEEP); + paint_partial_white(gc, obj); /* for never write barriers */ } }