From e8b72e6f5feeddfaf9232eb6eb614bc2783ae790 Mon Sep 17 00:00:00 2001 From: Daisuke Aritomo Date: Wed, 28 May 2025 20:24:09 +0900 Subject: [PATCH] [Bug #21368] Transfer finalizer when moving between Ractors Co-authored-by: zzak --- ractor.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ractor.c b/ractor.c index b2446439a3..879d1625b1 100644 --- a/ractor.c +++ b/ractor.c @@ -3666,6 +3666,12 @@ move_leave(VALUE obj, struct obj_traverse_replace_data *data) rb_gc_obj_slot_size(obj) - sizeof(VALUE) ); + if (FL_TEST_RAW(obj, FL_FINALIZE)) { + rb_gc_copy_finalizer(data->replacement, obj); + rb_undefine_finalizer(obj); + FL_UNSET_RAW(obj, FL_FINALIZE); + } + void rb_replace_generic_ivar(VALUE clone, VALUE obj); // variable.c rb_gc_obj_id_moved(data->replacement); -- 2.48.1