Skip to content

Commit bad80a2

Browse files
committed
Add missing call to rb_gc_obj_needs_cleanup_p
1 parent 621a3eb commit bad80a2

1 file changed

Lines changed: 27 additions & 20 deletions

File tree

gc/default/default.c

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4519,26 +4519,33 @@ gc_pre_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *p
45194519
}
45204520
break;
45214521
free: {
4522-
debug_free_check(objspace, vp);
4523-
if (RB_LIKELY(rb_gc_obj_free_concurrency_safe_vm_weak_references(vp))) {
4524-
bool can_put_back_on_freelist = rb_gc_obj_free(objspace, vp);
4525-
if (can_put_back_on_freelist) {
4526-
heap_page_add_freeobj(objspace, page, vp, true);
4527-
freed++;
4528-
psweep_debug(2, "[sweep] freed: page(%p), obj(%p)\n", (void*)page, (void*)vp);
4529-
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)vp, page->slot_size);
4530-
}
4531-
else {
4532-
RUBY_ASSERT(BUILTIN_TYPE(vp) == T_ZOMBIE);
4533-
psweep_debug(2, "[sweep] zombie: page(%p), obj(%p)\n", (void*)page, (void*)vp);
4534-
finals++;
4535-
}
4536-
}
4537-
else {
4538-
GC_ASSERT(BUILTIN_TYPE(vp) != T_NONE);
4539-
sweep_in_ruby_thread(objspace, page, vp);
4540-
}
4541-
break;
4522+
debug_free_check(objspace, vp);
4523+
if (!rb_gc_obj_needs_cleanup_p(vp)) {
4524+
heap_page_add_freeobj(objspace, page, vp, true);
4525+
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)vp, page->slot_size);
4526+
freed++;
4527+
}
4528+
else {
4529+
if (RB_LIKELY(rb_gc_obj_free_concurrency_safe_vm_weak_references(vp))) {
4530+
bool can_put_back_on_freelist = rb_gc_obj_free(objspace, vp);
4531+
if (can_put_back_on_freelist) {
4532+
heap_page_add_freeobj(objspace, page, vp, true);
4533+
freed++;
4534+
psweep_debug(2, "[sweep] freed: page(%p), obj(%p)\n", (void*)page, (void*)vp);
4535+
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)vp, page->slot_size);
4536+
}
4537+
else {
4538+
RUBY_ASSERT(BUILTIN_TYPE(vp) == T_ZOMBIE);
4539+
psweep_debug(2, "[sweep] zombie: page(%p), obj(%p)\n", (void*)page, (void*)vp);
4540+
finals++;
4541+
}
4542+
}
4543+
else {
4544+
GC_ASSERT(BUILTIN_TYPE(vp) != T_NONE);
4545+
sweep_in_ruby_thread(objspace, page, vp);
4546+
}
4547+
}
4548+
break;
45424549
}
45434550
default:
45444551
rb_bug("unexpected type: %d\n", BUILTIN_TYPE(vp));

0 commit comments

Comments
 (0)