diff options
author | Matt Valentine-House <[email protected]> | 2021-10-29 14:23:29 +0100 |
---|---|---|
committer | Aaron Patterson <[email protected]> | 2021-10-29 08:58:22 -0700 |
commit | d7279f0894d94da41367fe96d9b08ebfee6122d4 (patch) | |
tree | b393da512b43d1eab2572a263de63a1fe00cc03b /gc.c | |
parent | ed8540ebf400e7574f5a8e5c7e3f1d50f76b263d (diff) |
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.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5055
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -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; |