aboutsummaryrefslogtreecommitdiffstats
path: root/array.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-09-25 17:12:55 +0900
committerKoichi Sasada <ko1@atdot.net>2019-09-25 17:12:55 +0900
commit6d578164f5da815fb71d23ad186e841359384f25 (patch)
tree142fcc601a4e353e9254a4a5c6438bc275b92951 /array.c
parent3deeb3fd914bc5604e84e7a41ec2b5193a560479 (diff)
downloadruby-6d578164f5da815fb71d23ad186e841359384f25.tar.gz
check `ARY_SHARED_ROOT_P()`.
ARY_SHARED_ROOT_P(ary) is true, ARY_HEAP_CAPA(ary) should not be called.
Diffstat (limited to 'array.c')
-rw-r--r--array.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/array.c b/array.c
index 7b086f4ff9..825d9f7126 100644
--- a/array.c
+++ b/array.c
@@ -786,7 +786,11 @@ void
rb_ary_free(VALUE ary)
{
if (ARY_OWNS_HEAP_P(ary)) {
- (void)RB_DEBUG_COUNTER_INC_IF(obj_ary_extracapa, ARY_HEAP_CAPA(ary) > RARRAY_LEN(ary));
+ if (USE_DEBUG_COUNTER &&
+ !ARY_SHARED_ROOT_P(ary) &&
+ ARY_HEAP_CAPA(ary) > RARRAY_LEN(ary)) {
+ RB_DEBUG_COUNTER_INC(obj_ary_extracapa);
+ }
if (RARRAY_TRANSIENT_P(ary)) {
RB_DEBUG_COUNTER_INC(obj_ary_transient);