diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-10-29 11:51:04 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-10-29 11:51:04 +0900 |
| commit | dffa203d07aaeec4ea65669542a8ec2033559bdd (patch) | |
| tree | 4f11e5e900d8b787659e58fe0198ebf5d0a3a755 /src/gc.c | |
| parent | 7ff84789c3f77f0d61441f9afb22a1039ea7cc4a (diff) | |
| download | mruby-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`
}
```
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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; |
