diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-22 11:05:22 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-22 11:05:22 +0900 |
| commit | 2045a3529266e903d0db0c9e16081fe2fa01b9df (patch) | |
| tree | 33458e1f6953cf6851db4bcff85d4d899f04058e /src | |
| parent | 1cfd3fb9eb7d53b7f91126169ae48b7c64a8cd3e (diff) | |
| download | mruby-2045a3529266e903d0db0c9e16081fe2fa01b9df.tar.gz mruby-2045a3529266e903d0db0c9e16081fe2fa01b9df.zip | |
garbage collect context (fiber) properly
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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; |
