summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gc.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/gc.c b/src/gc.c
index d5a55bde0..62161b7f0 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -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);
}