summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index dd63395bd..49cc137f5 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -815,7 +815,11 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
struct RProc *p = (struct RProc*)obj;
if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
+ int refcnt = p->body.irep->refcnt;
mrb_irep_decref(mrb, p->body.irep);
+ if (refcnt == 2) { /* reference only from irep */
+ p->body.irep->outer = NULL;
+ }
}
}
break;