Fix verify_internal_consistency_i for zombie objects
FL_FINALIZE is now kept for zombie objects.
This commit is contained in:
parent
1ce3d9acbf
commit
27e3e44390
6
gc.c
6
gc.c
@ -3139,11 +3139,13 @@ cvar_table_free_i(VALUE value, void *ctx)
|
|||||||
return ID_TABLE_CONTINUE;
|
return ID_TABLE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ZOMBIE_OBJ_KEPT_FLAGS (FL_SEEN_OBJ_ID | FL_FINALIZE)
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *data)
|
make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *data)
|
||||||
{
|
{
|
||||||
struct RZombie *zombie = RZOMBIE(obj);
|
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->dfree = dfree;
|
||||||
zombie->data = data;
|
zombie->data = data;
|
||||||
VALUE prev, next = heap_pages_deferred_final;
|
VALUE prev, next = heap_pages_deferred_final;
|
||||||
@ -7587,7 +7589,7 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (BUILTIN_TYPE(obj) == T_ZOMBIE) {
|
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++;
|
data->zombie_object_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user