From f18883b2954ef327eef59dec356391c2541e5dcd Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 22 May 2025 11:21:11 +0200 Subject: Namespaces: Don't initialize fields for T_ICLASS ICLASS don't have instance variables or anything like that. `gc_mark_classext_iclass` didn't mark it, and `classext_iclass_free` wasn't freeing it. --- class.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'class.c') diff --git a/class.c b/class.c index 3c81132ce3..d743fb3fbb 100644 --- a/class.c +++ b/class.c @@ -278,10 +278,12 @@ class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_n else { RCLASSEXT_M_TBL(ext) = RCLASSEXT_M_TBL(mod_ext); } - RCLASSEXT_FIELDS(ext) = (VALUE *)st_init_numtable(); + RCLASSEXT_CONST_TBL(ext) = RCLASSEXT_CONST_TBL(mod_ext); RCLASSEXT_CVC_TBL(ext) = RCLASSEXT_CVC_TBL(mod_ext); + RUBY_ASSERT(!RCLASSEXT_FIELDS(mod_ext)); + // Those are cache and should be recreated when methods are called // RCLASSEXT_CALLABLE_M_TBL(ext) = NULL; // RCLASSEXT_CC_TBL(ext) = NULL; -- cgit v1.2.3