diff --git a/gc.c b/gc.c index aed788d39b..ee8b7bc376 100644 --- a/gc.c +++ b/gc.c @@ -2104,7 +2104,16 @@ rb_gc_mark_weak(VALUE *ptr) { if (RB_SPECIAL_CONST_P(*ptr)) return; - rb_gc_impl_mark_weak(rb_gc_get_objspace(), ptr); + rb_vm_t *vm = GET_VM(); + void *objspace = vm->gc.objspace; + if (LIKELY(vm->gc.mark_func_data == NULL)) { + GC_ASSERT(rb_gc_impl_during_gc_p(objspace)); + + rb_gc_impl_mark_weak(objspace, ptr); + } + else { + GC_ASSERT(!rb_gc_impl_during_gc_p(objspace)); + } } void diff --git a/gc/default.c b/gc/default.c index b5fa1a6b4b..94e5acf3d7 100644 --- a/gc/default.c +++ b/gc/default.c @@ -4607,8 +4607,6 @@ rb_gc_impl_mark_weak(void *objspace_ptr, VALUE *ptr) { rb_objspace_t *objspace = objspace_ptr; - if (RB_UNLIKELY(!during_gc)) return; - GC_ASSERT(objspace->rgengc.parent_object == 0 || FL_TEST(objspace->rgengc.parent_object, FL_WB_PROTECTED)); VALUE obj = *ptr;