Skip to content

Commit 2862fb9

Browse files
peterzhu2118eightbitraptor
authored andcommitted
Implement age on object metadata
1 parent bf9560e commit 2862fb9

2 files changed

Lines changed: 12 additions & 6 deletions

File tree

gc/default/default.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

include/ruby/internal/fl_type.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,14 @@ ruby_fl_type {
198198
RUBY_FL_WB_PROTECTED = (1<<5),
199199

200200
/**
201-
* This flag is no longer in use
201+
* This flag is no longer in use.
202+
*
203+
* @internal
204+
*/
205+
RUBY_FL_UNUSED5 = (1<<5),
206+
207+
/**
208+
* This flag is no longer in use.
202209
*
203210
* @internal
204211
*/

0 commit comments

Comments
 (0)