1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

make obj_free return true when it frees an object

Previously obj_free returned true when it could not free a slot because
of a finalizer, and false when it successfully frees a slot.
This commit is contained in:
Matt Valentine-House 2021-10-29 14:23:29 +01:00 committed by Aaron Patterson
parent ed8540ebf4
commit d7279f0894
Notes: git 2021-10-30 00:58:48 +09:00

17
gc.c
View file

@ -3247,7 +3247,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
else { else {
make_zombie(objspace, obj, dfree, data); make_zombie(objspace, obj, dfree, data);
RB_DEBUG_COUNTER_INC(obj_data_zombie); RB_DEBUG_COUNTER_INC(obj_data_zombie);
return 1; return FALSE;
} }
} }
else { else {
@ -3281,7 +3281,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
if (RANY(obj)->as.file.fptr) { if (RANY(obj)->as.file.fptr) {
make_io_zombie(objspace, obj); make_io_zombie(objspace, obj);
RB_DEBUG_COUNTER_INC(obj_file_ptr); RB_DEBUG_COUNTER_INC(obj_file_ptr);
return 1; return FALSE;
} }
break; break;
case T_RATIONAL: case T_RATIONAL:
@ -3403,7 +3403,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
RB_DEBUG_COUNTER_INC(obj_imemo_constcache); RB_DEBUG_COUNTER_INC(obj_imemo_constcache);
break; break;
} }
return 0; return TRUE;
default: default:
rb_bug("gc_sweep(): unknown data type 0x%x(%p) 0x%"PRIxVALUE, rb_bug("gc_sweep(): unknown data type 0x%x(%p) 0x%"PRIxVALUE,
@ -3412,10 +3412,10 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
if (FL_TEST(obj, FL_FINALIZE)) { if (FL_TEST(obj, FL_FINALIZE)) {
make_zombie(objspace, obj, 0, 0); make_zombie(objspace, obj, 0, 0);
return 1; return FALSE;
} }
else { else {
return 0; return TRUE;
} }
} }
@ -5343,9 +5343,6 @@ gc_plane_sweep(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
} }
#endif #endif
if (obj_free(objspace, vp)) { if (obj_free(objspace, vp)) {
ctx->final_slots++;
}
else {
if (heap->compact_cursor) { if (heap->compact_cursor) {
/* We *want* to fill this slot */ /* We *want* to fill this slot */
MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(vp), vp); MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(vp), vp);
@ -5356,7 +5353,9 @@ gc_plane_sweep(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp)); gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp));
ctx->freed_slots++; ctx->freed_slots++;
} }
}
else {
ctx->final_slots++;
} }
break; break;