summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-10-28 09:21:14 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-10-28 09:21:14 +0900
commit9a126278b6f0fcfbec9c4a2ee391290d3ce2122f (patch)
treef935f8b514995057af953835cedee4827d646ac2
parentc45ed46f28b2d73aa36eeb0539cb0f3bc173b528 (diff)
downloadmruby-9a126278b6f0fcfbec9c4a2ee391290d3ce2122f.tar.gz
mruby-9a126278b6f0fcfbec9c4a2ee391290d3ce2122f.zip
should not unshare() reclaimed env objects; fix #3230
-rw-r--r--src/gc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index fe0184178..b29df1f02 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -736,7 +736,8 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
while (ce <= ci) {
struct REnv *e = ci->env;
- if (e && !is_dead(&mrb->gc, e) && MRB_ENV_STACK_SHARED_P(e)) {
+ if (e && !is_dead(&mrb->gc, e) &&
+ e->tt == MRB_TT_ENV && MRB_ENV_STACK_SHARED_P(e)) {
mrb_env_unshare(mrb, e);
}
ci--;