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 {
|
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue