summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2024-02-29 11:07:53 -0500
committerPeter Zhu <peter@peterzhu.ca>2024-02-29 11:07:53 -0500
commit4c0f0b90a4f4b33d1c1af7b7415c27ad105e6264 (patch)
treed4b6aa06b58c570ee29212ba7af29ed399a61814 /gc.c
parentf8dd2342bf99738e2a8d7a4fa9e31bff186e0d5a (diff)
Assume that FL_FINALIZE is in finalizer_table
If FL_FINALIZE is set but not in finalizer_table, then rb_bug.
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index 2034b469cd..e84c4e1462 100644
--- a/gc.c
+++ b/gc.c
@@ -4043,11 +4043,15 @@ rb_gc_copy_finalizer(VALUE dest, VALUE obj)
st_data_t data;
if (!FL_TEST(obj, FL_FINALIZE)) return;
- if (st_lookup(finalizer_table, obj, &data)) {
+
+ if (RB_LIKELY(st_lookup(finalizer_table, obj, &data))) {
table = (VALUE)data;
st_insert(finalizer_table, dest, table);
FL_SET(dest, FL_FINALIZE);
}
+ else {
+ rb_bug("rb_gc_copy_finalizer: FL_FINALIZE set but not found in finalizer_table: %s", obj_info(obj));
+ }
}
static VALUE