From 96d56debc7c33eeb5fdbd6183d638e32036fc4e9 Mon Sep 17 00:00:00 2001 From: dearblue Date: Wed, 3 Apr 2024 21:54:53 +0900 Subject: [PATCH] `mrb_env_unshare()` to break the link to fiber Currently `e->cxt` is used exclusively to check for `break` / `return` availability. In other words, there is no need to maintain a reference to a fiber that has reached its end. --- src/vm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vm.c b/src/vm.c index 68b3284ff..1fbdb408f 100644 --- a/src/vm.c +++ b/src/vm.c @@ -387,6 +387,8 @@ mrb_env_unshare(mrb_state *mrb, struct REnv *e, mrb_bool noraise) if (e->cxt != mrb->c) return TRUE; if (e == CI_ENV(mrb->c->cibase)) return TRUE; /* for mirb */ + e->cxt = NULL; /* make possible to GC the fiber that generated the env */ + size_t len = (size_t)MRB_ENV_LEN(e); if (len == 0) { e->stack = NULL;