[前][次][番号順一覧][スレッド一覧]

ruby-changes:66871

From: Nobuyoshi <ko1@a...>
Date: Fri, 23 Jul 2021 10:25:55 +0900 (JST)
Subject: [ruby-changes:66871] 4da07ac2f3 (master): Finalizers no longer store the safe level

https://git.ruby-lang.org/ruby.git/commit/?id=4da07ac2f3

From 4da07ac2f3d79103cde83a7213d4f7d0a878fc62 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 22 Jul 2021 23:21:28 +0900
Subject: Finalizers no longer store the safe level

---
 gc.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/gc.c b/gc.c
index 9847aa4..bcdd17a 100644
--- a/gc.c
+++ b/gc.c
@@ -3928,9 +3928,6 @@ define_final0(VALUE obj, VALUE block) https://github.com/ruby/ruby/blob/trunk/gc.c#L3928
 
     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) https://github.com/ruby/ruby/blob/trunk/gc.c#L3939
             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) https://github.com/ruby/ruby/blob/trunk/gc.c#L3952
 	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) https://github.com/ruby/ruby/blob/trunk/gc.c#L3982
 }
 
 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);
 }
 
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]