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.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-06-23 23:06:15 +09:00
parent fc9fffc5b5
commit a3365d8b3f
+1 -14
View File
@@ -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);
}
}