Fix free objects count condition

Free objects have `T_NONE` as the builtin type.  A pointer to a valid
array element will never be `NULL`.
This commit is contained in:
Nobuyoshi Nakada 2022-07-20 17:39:54 +09:00 коммит произвёл GitHub
Родитель e330dceb3f
Коммит 472740de41
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 3 добавлений и 2 удалений

5
gc.c
Просмотреть файл

@ -7866,9 +7866,10 @@ gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, VALUE obj)
for (uintptr_t ptr = start; ptr < end; ptr += slot_size) {
VALUE val = (VALUE)ptr;
void *poisoned = asan_unpoison_object_temporary(val);
enum ruby_value_type type = BUILTIN_TYPE(val);
if (RBASIC(val) == 0) free_objects++;
if (BUILTIN_TYPE(val) == T_ZOMBIE) zombie_objects++;
if (type == T_NONE) free_objects++;
if (type == T_ZOMBIE) zombie_objects++;
if (RVALUE_PAGE_UNCOLLECTIBLE(page, val) && RVALUE_PAGE_WB_UNPROTECTED(page, val)) {
has_remembered_shady = TRUE;
}