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:
parent
ed8540ebf4
commit
d7279f0894
Notes:
git
2021-10-30 00:58:48 +09:00
1 changed files with 8 additions and 9 deletions
17
gc.c
17
gc.c
|
@ -3247,7 +3247,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
|
|||
else {
|
||||
make_zombie(objspace, obj, dfree, data);
|
||||
RB_DEBUG_COUNTER_INC(obj_data_zombie);
|
||||
return 1;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -3281,7 +3281,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
|
|||
if (RANY(obj)->as.file.fptr) {
|
||||
make_io_zombie(objspace, obj);
|
||||
RB_DEBUG_COUNTER_INC(obj_file_ptr);
|
||||
return 1;
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case T_RATIONAL:
|
||||
|
@ -3403,7 +3403,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
|
|||
RB_DEBUG_COUNTER_INC(obj_imemo_constcache);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
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)) {
|
||||
make_zombie(objspace, obj, 0, 0);
|
||||
return 1;
|
||||
return FALSE;
|
||||
}
|
||||
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
|
||||
if (obj_free(objspace, vp)) {
|
||||
ctx->final_slots++;
|
||||
}
|
||||
else {
|
||||
if (heap->compact_cursor) {
|
||||
/* We *want* to fill this slot */
|
||||
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));
|
||||
ctx->freed_slots++;
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
ctx->final_slots++;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue