From 2045a3529266e903d0db0c9e16081fe2fa01b9df Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 22 May 2013 11:05:22 +0900 Subject: garbage collect context (fiber) properly --- src/gc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index 4837d5207..4d0ba8a16 100644 --- a/src/gc.c +++ b/src/gc.c @@ -412,7 +412,9 @@ mark_context(mrb_state *mrb, struct mrb_context *c) mrb_gc_mark(mrb, (struct RBasic*)ci->proc); mrb_gc_mark(mrb, (struct RBasic*)ci->target_class); } - if (c->prev) mark_context(mrb, c->prev); + if (c->prev && c->prev->fib) { + mrb_gc_mark(mrb, (struct RBasic*)c->prev->fib); + } } static void @@ -472,7 +474,6 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) struct mrb_context *c = ((struct RFiber*)obj)->cxt; mark_context(mrb, c); - ((struct RFiber*)obj)->cxt = NULL; } break; -- cgit v1.2.3