diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -780,17 +780,19 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) { struct mrb_context *c = ((struct RFiber*)obj)->cxt; - if (!end && c && c != mrb->root_c) { + if (c && c != mrb->root_c) { mrb_callinfo *ci = c->ci; mrb_callinfo *ce = c->cibase; - while (ce <= ci) { - struct REnv *e = ci->env; - if (e && !is_dead(&mrb->gc, e) && - e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) { - mrb_env_unshare(mrb, e); + if (!end) { + while (ce <= ci) { + struct REnv *e = ci->env; + if (e && !is_dead(&mrb->gc, e) && + e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) { + mrb_env_unshare(mrb, e); + } + ci--; } - ci--; } mrb_free_context(mrb, c); } |
