From 08c385ff66ba7bca24ab30a06a925f364c7b0c84 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 17 Jun 2017 08:33:58 +0900 Subject: Mark the GC arena in `final_marking_phase`. Arena can be modified during the marking phase. --- src/gc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index 799e46684..8b013b056 100644 --- a/src/gc.c +++ b/src/gc.c @@ -835,7 +835,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) static void root_scan_phase(mrb_state *mrb, mrb_gc *gc) { - size_t i, e; + int i, e; if (!is_minor_gc(gc)) { gc->gray_list = NULL; @@ -995,6 +995,12 @@ incremental_marking_phase(mrb_state *mrb, mrb_gc *gc, size_t limit) static void final_marking_phase(mrb_state *mrb, mrb_gc *gc) { + int i, e; + + /* mark arena */ + for (i=0,e=gc->arena_idx; iarena[i]); + } mrb_gc_mark_gv(mrb); mark_context(mrb, mrb->c); mark_context(mrb, mrb->root_c); -- cgit v1.2.3