From 4c0f0b90a4f4b33d1c1af7b7415c27ad105e6264 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 29 Feb 2024 11:07:53 -0500 Subject: [PATCH] Assume that FL_FINALIZE is in finalizer_table If FL_FINALIZE is set but not in finalizer_table, then rb_bug. --- gc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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