From 15d48efa4bf6a6b999dab99720fb9fe3c4a06ef0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 28 Aug 2017 09:45:49 +0900 Subject: Clear `irep->outer` when no `Proc` reference the `irep`; fix #3793 --- src/gc.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') 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; -- cgit v1.2.3