summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
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: