diff options
| -rw-r--r-- | gc.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -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); + } } } |
