summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/array.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/array.c b/src/array.c
index d008e52cf..74afc529a 100644
--- a/src/array.c
+++ b/src/array.c
@@ -902,10 +902,14 @@ mrb_ary_clear(mrb_state *mrb, mrb_value self)
{
struct RArray *a = mrb_ary_ptr(self);
- ary_modify(mrb, a);
+ if (ARY_SHARED_P(a)) {
+ mrb_ary_decref(mrb, a->aux.shared);
+ ARY_UNSET_SHARED_FLAG(a);
+ } else {
+ mrb_free(mrb, a->ptr);
+ }
a->len = 0;
a->aux.capa = 0;
- mrb_free(mrb, a->ptr);
a->ptr = 0;
return self;