Skip to content

Commit

Permalink
Fix verify_internal_consistency_i for zombie objects
Browse files Browse the repository at this point in the history
FL_FINALIZE is now kept for zombie objects.
  • Loading branch information
peterzhu2118 committed Feb 26, 2024
1 parent 1ce3d9a commit 27e3e44
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions gc.c
Expand Up @@ -3139,11 +3139,13 @@ cvar_table_free_i(VALUE value, void *ctx)
return ID_TABLE_CONTINUE;
}

#define ZOMBIE_OBJ_KEPT_FLAGS (FL_SEEN_OBJ_ID | FL_FINALIZE)

static inline void
make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *data)
{
struct RZombie *zombie = RZOMBIE(obj);
zombie->basic.flags = T_ZOMBIE | (zombie->basic.flags & (FL_SEEN_OBJ_ID | FL_FINALIZE));
zombie->basic.flags = T_ZOMBIE | (zombie->basic.flags & ZOMBIE_OBJ_KEPT_FLAGS);
zombie->dfree = dfree;
zombie->data = data;
VALUE prev, next = heap_pages_deferred_final;
Expand Down Expand Up @@ -7587,7 +7589,7 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride,
}
else {
if (BUILTIN_TYPE(obj) == T_ZOMBIE) {
GC_ASSERT((RBASIC(obj)->flags & ~FL_SEEN_OBJ_ID) == T_ZOMBIE);
GC_ASSERT((RBASIC(obj)->flags & ~ZOMBIE_OBJ_KEPT_FLAGS) == T_ZOMBIE);
data->zombie_object_count++;
}
}
Expand Down

0 comments on commit 27e3e44

Please sign in to comment.