diff options
-rw-r--r-- | gc/default/default.c | 4 | ||||
-rw-r--r-- | gc/mmtk/mmtk.c | 4 |
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; } |