Skip to content

Commit 27e3e44

Browse files
committed
Fix verify_internal_consistency_i for zombie objects
FL_FINALIZE is now kept for zombie objects.
1 parent 1ce3d9a commit 27e3e44

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

gc.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3139,11 +3139,13 @@ cvar_table_free_i(VALUE value, void *ctx)
31393139
return ID_TABLE_CONTINUE;
31403140
}
31413141

3142+
#define ZOMBIE_OBJ_KEPT_FLAGS (FL_SEEN_OBJ_ID | FL_FINALIZE)
3143+
31423144
static inline void
31433145
make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *data)
31443146
{
31453147
struct RZombie *zombie = RZOMBIE(obj);
3146-
zombie->basic.flags = T_ZOMBIE | (zombie->basic.flags & (FL_SEEN_OBJ_ID | FL_FINALIZE));
3148+
zombie->basic.flags = T_ZOMBIE | (zombie->basic.flags & ZOMBIE_OBJ_KEPT_FLAGS);
31473149
zombie->dfree = dfree;
31483150
zombie->data = data;
31493151
VALUE prev, next = heap_pages_deferred_final;
@@ -7587,7 +7589,7 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride,
75877589
}
75887590
else {
75897591
if (BUILTIN_TYPE(obj) == T_ZOMBIE) {
7590-
GC_ASSERT((RBASIC(obj)->flags & ~FL_SEEN_OBJ_ID) == T_ZOMBIE);
7592+
GC_ASSERT((RBASIC(obj)->flags & ~ZOMBIE_OBJ_KEPT_FLAGS) == T_ZOMBIE);
75917593
data->zombie_object_count++;
75927594
}
75937595
}

0 commit comments

Comments
 (0)