summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-03 23:05:31 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-03 23:05:31 +0900
commite4529c065dfcd844dbea11ba3822af7528393450 (patch)
tree3d35638eff080e831556bec17d02d2660be19e0e /src/gc.c
parent3be1c8890774c04d65bbed87914e9453d1496eed (diff)
downloadmruby-e4529c065dfcd844dbea11ba3822af7528393450.tar.gz
mruby-e4529c065dfcd844dbea11ba3822af7528393450.zip
make arrays to share bodies
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index b269ecfb4..b7c08de65 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -457,7 +457,10 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
break;
case MRB_TT_ARRAY:
- mrb_free(mrb, ((struct RArray*)obj)->buf);
+ if (obj->flags & MRB_ARY_SHARED)
+ mrb_ary_decref(mrb, ((struct RArray*)obj)->aux.shared);
+ else
+ mrb_free(mrb, ((struct RArray*)obj)->buf);
break;
case MRB_TT_HASH: