From 606db2c423aa2951c3f404fb5b58e15ee635f0ca Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 12 Sep 2024 10:21:08 -0400 Subject: [PATCH] Move special const checks to rb_gc_mark_weak --- gc.c | 2 ++ gc/default.c | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gc.c b/gc.c index 6c8e808fa8..ecfba4b58b 100644 --- a/gc.c +++ b/gc.c @@ -2100,6 +2100,8 @@ rb_gc_mark_maybe(VALUE obj) void rb_gc_mark_weak(VALUE *ptr) { + if (RB_SPECIAL_CONST_P(*ptr)) return; + rb_gc_impl_mark_weak(rb_gc_get_objspace(), ptr); } diff --git a/gc/default.c b/gc/default.c index f2915d7d8e..b5fa1a6b4b 100644 --- a/gc/default.c +++ b/gc/default.c @@ -4609,11 +4609,10 @@ rb_gc_impl_mark_weak(void *objspace_ptr, VALUE *ptr) if (RB_UNLIKELY(!during_gc)) return; - VALUE obj = *ptr; - if (RB_SPECIAL_CONST_P(obj)) return; - GC_ASSERT(objspace->rgengc.parent_object == 0 || FL_TEST(objspace->rgengc.parent_object, FL_WB_PROTECTED)); + VALUE obj = *ptr; + if (RB_UNLIKELY(RB_TYPE_P(obj, T_NONE))) { rb_obj_info_dump(obj); rb_bug("try to mark T_NONE object");