From bbcc3782b11939075f753b8f3260c8cd5137d600 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Sun, 11 May 2025 00:39:53 +0900 Subject: [PATCH] Skip updating max_iv_count when the namespace cannot be determined --- gc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gc.c b/gc.c index edb78a1923..302b95f664 100644 --- a/gc.c +++ b/gc.c @@ -3192,9 +3192,14 @@ rb_gc_mark_children(void *objspace, VALUE obj) if (fields_count) { VALUE klass = RBASIC_CLASS(obj); - // Increment max_iv_count if applicable, used to determine size pool allocation - if (RCLASS_MAX_IV_COUNT(klass) < fields_count) { - RCLASS_WRITE_MAX_IV_COUNT(klass, fields_count); + // Skip updating max_iv_count if the prime classext is not writable + // because GC context doesn't provide information about namespaces. + if (RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass)) { + VM_ASSERT(rb_shape_obj_too_complex_p(klass)); + // Increment max_iv_count if applicable, used to determine size pool allocation + if (RCLASS_MAX_IV_COUNT(klass) < fields_count) { + RCLASS_SET_MAX_IV_COUNT(klass, fields_count); + } } }