@@ -4038,12 +4038,11 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
40384038 CHECK (RVALUE_UNCOLLECTIBLE );
40394039#undef CHECK
40404040#endif
4041+ if (RB_UNLIKELY (objspace -> hook_events & RUBY_INTERNAL_EVENT_FREEOBJ )) {
4042+ rb_gc_event_hook (vp , RUBY_INTERNAL_EVENT_FREEOBJ );
4043+ }
40414044
40424045 if (!rb_gc_obj_needs_cleanup_p (vp )) {
4043- if (RB_UNLIKELY (objspace -> hook_events & RUBY_INTERNAL_EVENT_FREEOBJ )) {
4044- rb_gc_event_hook (vp , RUBY_INTERNAL_EVENT_FREEOBJ );
4045- }
4046-
40474046 gc_report (3 , objspace , "page_sweep: %s (fast path) added to freelist\n" , rb_obj_info (vp ));
40484047 RVALUE_AGE_SET_BITMAP (vp , 0 );
40494048 heap_page_add_freeobj (objspace , sweep_page , vp , false);
@@ -4052,9 +4051,6 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
40524051 }
40534052 else {
40544053 gc_report (2 , objspace , "page_sweep: free %p\n" , (void * )vp );
4055-
4056- rb_gc_event_hook (vp , RUBY_INTERNAL_EVENT_FREEOBJ );
4057-
40584054 rb_gc_obj_free_vm_weak_references (vp );
40594055 if (rb_gc_obj_free (objspace , vp )) {
40604056 gc_report (3 , objspace , "page_sweep: %s is added to freelist\n" , rb_obj_info (vp ));
0 commit comments