aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gc.c2
-rw-r--r--gc/default.c4
2 files changed, 5 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index 9c7114e5a7..b441a0beb2 100644
--- a/gc.c
+++ b/gc.c
@@ -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);
}