summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-10-29 11:51:04 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-10-29 11:51:04 +0900
commitdffa203d07aaeec4ea65669542a8ec2033559bdd (patch)
tree4f11e5e900d8b787659e58fe0198ebf5d0a3a755
parent7ff84789c3f77f0d61441f9afb22a1039ea7cc4a (diff)
downloadmruby-dffa203d07aaeec4ea65669542a8ec2033559bdd.tar.gz
mruby-dffa203d07aaeec4ea65669542a8ec2033559bdd.zip
Need to mark shared env objects as `MRB_TT_FREE`; fix #4143
The following code mistakenly exits from the function without marking the env object as `MRB_TT_FREE`. ``` ruby if (MRB_ENV_STACK_SHARED_P(e)) { /* cannot be freed */ return; // <- should be `break` } ```
-rw-r--r--src/gc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index e429603dd..9b11b7a83 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -788,7 +788,8 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
if (MRB_ENV_STACK_SHARED_P(e)) {
/* cannot be freed */
- return;
+ e->stack = NULL;
+ break;
}
mrb_free(mrb, e->stack);
e->stack = NULL;