diff options
-rw-r--r-- | gc.c | 2 | ||||
-rw-r--r-- | gc/default.c | 4 |
2 files changed, 5 insertions, 1 deletions
@@ -1448,6 +1448,8 @@ os_each_obj(int argc, VALUE *argv, VALUE os) static VALUE undefine_final(VALUE os, VALUE obj) { + rb_check_frozen(obj); + rb_gc_impl_undefine_finalizer(rb_gc_get_objspace(), obj); return obj; diff --git a/gc/default.c b/gc/default.c index e5662fc586..65006a2e32 100644 --- a/gc/default.c +++ b/gc/default.c @@ -3005,8 +3005,10 @@ void rb_gc_impl_undefine_finalizer(void *objspace_ptr, VALUE obj) { rb_objspace_t *objspace = objspace_ptr; + + GC_ASSERT(!OBJ_FROZEN(obj)); + st_data_t data = obj; - rb_check_frozen(obj); st_delete(finalizer_table, &data, 0); FL_UNSET(obj, FL_FINALIZE); } |