summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-07-22 23:21:28 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-07-23 10:25:37 +0900
commit4da07ac2f3d79103cde83a7213d4f7d0a878fc62 (patch)
tree2e31ad3eefd03f1c8b85ba11f3540fa4f0ab8c82 /gc.c
parentfc78a0890481e092ec9737c1ab3cbd4c32793eaa (diff)
Finalizers no longer store the safe level
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4669
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gc.c b/gc.c
index 9847aa4937..bcdd17a754 100644
--- a/gc.c
+++ b/gc.c
@@ -3928,9 +3928,6 @@ define_final0(VALUE obj, VALUE block)
RBASIC(obj)->flags |= FL_FINALIZE;
- block = rb_ary_new3(2, INT2FIX(0), block);
- OBJ_FREEZE(block);
-
if (st_lookup(finalizer_table, obj, &data)) {
table = (VALUE)data;
@@ -3942,7 +3939,8 @@ define_final0(VALUE obj, VALUE block)
for (i = 0; i < len; i++) {
VALUE recv = RARRAY_AREF(table, i);
if (rb_funcall(recv, idEq, 1, block)) {
- return recv;
+ block = recv;
+ goto end;
}
}
}
@@ -3954,6 +3952,9 @@ define_final0(VALUE obj, VALUE block)
RBASIC_CLEAR_CLASS(table);
st_add_direct(finalizer_table, obj, table);
}
+ end:
+ block = rb_ary_new3(2, INT2FIX(0), block);
+ OBJ_FREEZE(block);
return block;
}
@@ -3981,9 +3982,8 @@ rb_gc_copy_finalizer(VALUE dest, VALUE obj)
}
static VALUE
-run_single_final(VALUE final, VALUE objid)
+run_single_final(VALUE cmd, VALUE objid)
{
- const VALUE cmd = RARRAY_AREF(final, 1);
return rb_check_funcall(cmd, idCall, 1, &objid);
}