summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorMatt Valentine-House <matt@eightbitraptor.com>2021-10-29 14:23:29 +0100
committerAaron Patterson <aaron.patterson@gmail.com>2021-10-29 08:58:22 -0700
commitd7279f0894d94da41367fe96d9b08ebfee6122d4 (patch)
treeb393da512b43d1eab2572a263de63a1fe00cc03b /gc.c
parented8540ebf400e7574f5a8e5c7e3f1d50f76b263d (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.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/gc.c b/gc.c
index 48b7b80b4b..3fa1abb59a 100644
--- a/gc.c
+++ b/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;