Skip to content

Commit 635ccc3

Browse files
fixup bad rebase
1 parent 6dcbf8d commit 635ccc3

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

gc.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9126,41 +9126,43 @@ gc_ref_update(void *vstart, void *vend, size_t stride, void * data)
91269126
{
91279127
rb_objspace_t * objspace;
91289128
struct heap_page *page;
9129+
short free_slots = 0;
91299130

91309131
VALUE v = (VALUE)vstart;
91319132
objspace = (rb_objspace_t *)data;
91329133
page = GET_HEAP_PAGE(v);
9134+
asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false);
9135+
asan_poison_memory_region(&page->freelist, sizeof(RVALUE*));
9136+
page->flags.has_uncollectible_shady_objects = FALSE;
9137+
page->flags.has_remembered_objects = FALSE;
91339138

91349139
/* For each object on the page */
91359140
for (; v != (VALUE)vend; v += stride) {
91369141
void *poisoned = asan_poisoned_object_p(v);
91379142
asan_unpoison_object(v, false);
91389143

9139-
switch (BUILTIN_TYPE(v)) {
9140-
case T_NONE:
9141-
case T_MOVED:
9142-
case T_ZOMBIE:
9143-
break;
9144-
default:
9145-
if (RVALUE_WB_UNPROTECTED(v)) {
9146-
page->flags.has_uncollectible_shady_objects = TRUE;
9147-
}
9148-
if (RVALUE_PAGE_MARKING(page, v)) {
9149-
page->flags.has_remembered_objects = TRUE;
9150-
}
9151-
gc_update_object_references(objspace, v);
9144+
switch (BUILTIN_TYPE(v)) {
9145+
case T_NONE:
9146+
case T_MOVED:
9147+
case T_ZOMBIE:
9148+
break;
9149+
default:
9150+
if (RVALUE_WB_UNPROTECTED(v)) {
9151+
page->flags.has_uncollectible_shady_objects = TRUE;
91529152
}
91539153
if (RVALUE_PAGE_MARKING(page, v)) {
9154-
page->flags.has_remembered_objects = TRUE;
9154+
page->flags.has_remembered_objects = TRUE;
91559155
}
91569156
gc_update_object_references(objspace, v);
91579157
}
91589158

91599159
if (poisoned) {
9160+
GC_ASSERT(BUILTIN_TYPE(v) == T_NONE);
91609161
asan_poison_object(v);
91619162
}
91629163
}
91639164

9165+
page->free_slots = free_slots;
91649166
return 0;
91659167
}
91669168

0 commit comments

Comments
 (0)