diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-07-22 23:21:28 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-07-23 10:25:37 +0900 |
commit | 4da07ac2f3d79103cde83a7213d4f7d0a878fc62 (patch) | |
tree | 2e31ad3eefd03f1c8b85ba11f3540fa4f0ab8c82 | |
parent | fc78a0890481e092ec9737c1ab3cbd4c32793eaa (diff) | |
download | ruby-4da07ac2f3d79103cde83a7213d4f7d0a878fc62.tar.gz |
Finalizers no longer store the safe level
-rw-r--r-- | gc.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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); } |