From 3acaa44a70a44a816076dee65310f0f2487aeebd Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 4 Sep 2017 06:51:31 +0900 Subject: Restructure `irep->outer` chain; fix #3804 Instead of `irep -> proc` chain, we use `irep -> irep` chain to avoid GC bugs like #3804. We added `target_class` reference to `mrb_irep` struct. That means one more word consumption per `irep`. --- src/state.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/state.c') diff --git a/src/state.c b/src/state.c index f09b20903..039d67d57 100644 --- a/src/state.c +++ b/src/state.c @@ -157,6 +157,8 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) for (i=0; irlen; i++) { mrb_irep_decref(mrb, irep->reps[i]); } + if (irep->outer) + mrb_irep_decref(mrb, irep->outer); mrb_free(mrb, irep->reps); mrb_free(mrb, irep->lv); if (irep->own_filename) { -- cgit v1.2.3