mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Need to free contexts when freeing fibers.
Memory leak fixed; ref #3711
This commit is contained in:
@@ -780,17 +780,19 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
|
||||
{
|
||||
struct mrb_context *c = ((struct RFiber*)obj)->cxt;
|
||||
|
||||
if (!end && c && c != mrb->root_c) {
|
||||
if (c && c != mrb->root_c) {
|
||||
mrb_callinfo *ci = c->ci;
|
||||
mrb_callinfo *ce = c->cibase;
|
||||
|
||||
while (ce <= ci) {
|
||||
struct REnv *e = ci->env;
|
||||
if (e && !is_dead(&mrb->gc, e) &&
|
||||
e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) {
|
||||
mrb_env_unshare(mrb, e);
|
||||
if (!end) {
|
||||
while (ce <= ci) {
|
||||
struct REnv *e = ci->env;
|
||||
if (e && !is_dead(&mrb->gc, e) &&
|
||||
e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) {
|
||||
mrb_env_unshare(mrb, e);
|
||||
}
|
||||
ci--;
|
||||
}
|
||||
ci--;
|
||||
}
|
||||
mrb_free_context(mrb, c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user