diff --git a/gc.c b/gc.c index ba7007da39..f4d4e137ae 100644 --- a/gc.c +++ b/gc.c @@ -1087,8 +1087,6 @@ rb_gc_obj_free(void *objspace, VALUE obj) { RB_DEBUG_COUNTER_INC(obj_free); - rb_gc_event_hook(obj, RUBY_INTERNAL_EVENT_FREEOBJ); - switch (BUILTIN_TYPE(obj)) { case T_NIL: case T_FIXNUM: diff --git a/gc/default.c b/gc/default.c index 4df9a8b9fd..09acad1618 100644 --- a/gc/default.c +++ b/gc/default.c @@ -3565,6 +3565,8 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit #undef CHECK #endif + rb_gc_event_hook(vp, RUBY_INTERNAL_EVENT_FREEOBJ); + bool has_object_id = FL_TEST(vp, FL_SEEN_OBJ_ID); if (rb_gc_obj_free(objspace, vp)) { if (has_object_id) {