summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-10-31 09:06:04 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-10-31 09:10:08 +0900
commitb6598e052fda9a27692156ab8b973ce6e3374ee3 (patch)
treecd26a94f0efd05990f6b306bf238129189e820d3 /src/gc.c
parent77edafb04c4bc15e3c348acb0d1e7f873b7a66f0 (diff)
downloadmruby-b6598e052fda9a27692156ab8b973ce6e3374ee3.tar.gz
mruby-b6598e052fda9a27692156ab8b973ce6e3374ee3.zip
Need to mark fibers referenced from `env`; fix #3837
The issue #3837 is a regression of #3819. I was mistakenly removed a important code to mark fibers from `env`.
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index a3a638ae3..4b83f454b 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -657,6 +657,9 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
struct REnv *e = (struct REnv*)obj;
mrb_int i, len;
+ if (MRB_ENV_STACK_SHARED_P(e) && e->cxt->fib) {
+ mrb_gc_mark(mrb, (struct RBasic*)e->cxt->fib);
+ }
len = MRB_ENV_STACK_LEN(e);
for (i=0; i<len; i++) {
mrb_gc_mark_value(mrb, e->stack[i]);