gc.c: fix GC regressions

The past fix was wrong.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-03-29 22:55:45 +09:00
parent 1f5a4d5386
commit f1568af0d2
+4 -3
View File
@@ -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 */
}
}