summaryrefslogtreecommitdiff
path: root/gc/default/default.c
diff options
authorJean Boussier <[email protected]>2025-05-15 13:00:18 +0200
committerJean Boussier <[email protected]>2025-05-15 13:32:08 +0200
commited632cd0bacc710b03809c903a978d3fa2cfedfe (patch)
tree75a613535c8dc7b582d64c76b844f55a40e0d950 /gc/default/default.c
parent3d1b8e7298957711998bfb2e8cce09bcc17e4d46 (diff)
Add missing lock in `rb_gc_impl_undefine_finalizer`
The table is global so accesses must be synchronized.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/13349
Diffstat (limited to 'gc/default/default.c')
-rw-r--r--gc/default/default.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index da1438c2fe..6d5e7a35a3 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -2774,7 +2774,11 @@ rb_gc_impl_undefine_finalizer(void *objspace_ptr, VALUE obj)
GC_ASSERT(!OBJ_FROZEN(obj));
st_data_t data = obj;
+
+ int lev = rb_gc_vm_lock();
st_delete(finalizer_table, &data, 0);
+ rb_gc_vm_unlock(lev);
+
FL_UNSET(obj, FL_FINALIZE);
}