summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc/default/default.c4
-rw-r--r--gc/mmtk/mmtk.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index 447fe15b06..1dda258bfd 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -2834,6 +2834,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
RBASIC(obj)->flags |= FL_FINALIZE;
+ int lev = rb_gc_vm_lock();
+
if (st_lookup(finalizer_table, obj, &data)) {
table = (VALUE)data;
@@ -2858,6 +2860,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
st_add_direct(finalizer_table, obj, table);
}
+ rb_gc_vm_unlock(lev);
+
return block;
}
diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c
index b844c8c2a3..70df47563d 100644
--- a/gc/mmtk/mmtk.c
+++ b/gc/mmtk/mmtk.c
@@ -973,6 +973,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
RBASIC(obj)->flags |= FL_FINALIZE;
+ int lev = rb_gc_vm_lock();
+
if (st_lookup(objspace->finalizer_table, obj, &data)) {
table = (VALUE)data;
@@ -997,6 +999,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
st_add_direct(objspace->finalizer_table, obj, table);
}
+ rb_gc_vm_unlock(lev);
+
return block;
}