From a3365d8b3fc957b1d1fd89526440358aa9402fc3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 23 Jun 2023 23:06:15 +0900 Subject: [PATCH] gc.c (obj_free): need not to unshare env object when freeing fibers Since when env objects reference the context, we no longer need to unshare (stack reallocate) env objects. Currently all env objects referenced from fibers are already recycled, so we removed unnecessary code altogether. --- src/gc.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/gc.c b/src/gc.c index 9263e7692..36286c424 100644 --- a/src/gc.c +++ b/src/gc.c @@ -791,20 +791,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) { struct mrb_context *c = ((struct RFiber*)obj)->cxt; - if (c && c != mrb->root_c) { - if (!end && c->status != MRB_FIBER_TERMINATED) { - mrb_callinfo *ci = c->ci; - mrb_callinfo *ce = c->cibase; - - while (ce <= ci) { - struct REnv *e = ci->u.env; - if (e && !is_dead(&mrb->gc, (struct RBasic*)e) && - e->tt == MRB_TT_ENV && MRB_ENV_ONSTACK_P(e)) { - mrb_env_unshare(mrb, e, TRUE); - } - ci--; - } - } + if (c != mrb->root_c) { mrb_free_context(mrb, c); } }