From cbfa2b3588732f41669a532f5070cd87cf270319 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 5 Sep 2017 21:13:16 +0900 Subject: Avoid recursion from `mark_context()`. --- src/gc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') 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; } } -- cgit v1.2.3