summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index d602bfb70..1e7ff5f5a 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -582,6 +582,7 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
int i;
mrb_callinfo *ci;
+ start:
if (c->status == MRB_FIBER_TERMINATED) return;
/* mark VM stack */
@@ -603,7 +604,8 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
/* mark fibers */
mrb_gc_mark(mrb, (struct RBasic*)c->fib);
if (c->prev) {
- mark_context(mrb, c->prev);
+ c = c->prev;
+ goto start;
}
}