@@ -1637,7 +1637,7 @@ heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj
16371637 page -> freelist = slot ;
16381638 asan_lock_freelist (page );
16391639
1640- RVALUE_AGE_RESET ( obj );
1640+ memset ( RVALUE_METADATA ( obj ), 0 , sizeof ( struct object_metadata ) );
16411641
16421642 if (RGENGC_CHECK_MODE &&
16431643 /* obj should belong to page */
@@ -6930,7 +6930,6 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si
69306930 int marked ;
69316931 int wb_unprotected ;
69326932 int uncollectible ;
6933- int age ;
69346933
69356934 gc_report (4 , objspace , "Moving object: %p -> %p\n" , (void * )src , (void * )dest );
69366935
@@ -6944,7 +6943,6 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si
69446943 wb_unprotected = RVALUE_WB_UNPROTECTED (objspace , src );
69456944 uncollectible = RVALUE_UNCOLLECTIBLE (objspace , src );
69466945 bool remembered = RVALUE_REMEMBERED (objspace , src );
6947- age = RVALUE_AGE_GET (src );
69486946
69496947 /* Clear bits for eventual T_MOVED */
69506948 CLEAR_IN_BITMAP (GET_HEAP_MARK_BITS (src ), src );
@@ -6984,7 +6982,6 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si
69846982 }
69856983
69866984 memset ((void * )src , 0 , src_slot_size );
6987- RVALUE_AGE_RESET (src );
69886985
69896986 /* Set bits for object in new location */
69906987 if (remembered ) {
@@ -7015,7 +7012,9 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si
70157012 CLEAR_IN_BITMAP (GET_HEAP_UNCOLLECTIBLE_BITS (dest ), dest );
70167013 }
70177014
7018- RVALUE_AGE_SET (dest , age );
7015+ * RVALUE_METADATA (dest ) = * RVALUE_METADATA (src );
7016+ memset (RVALUE_METADATA (src ), 0 , sizeof (struct object_metadata ));
7017+
70197018 /* Assign forwarding address */
70207019 RMOVED (src )-> flags = T_MOVED ;
70217020 RMOVED (src )-> dummy = Qundef ;
0 commit comments