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

ruby-changes:63364

From: Aaron <ko1@a...>
Date: Sat, 17 Oct 2020 03:29:28 +0900 (JST)
Subject: [ruby-changes:63364] ff9dc10966 (master): keep proc on the stack so it does not move

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

From ff9dc109665e515da8b544a55085bb793063adf1 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <tenderlove@r...>
Date: Thu, 17 Sep 2020 09:43:32 -0700
Subject: keep proc on the stack so it does not move


diff --git a/ext/-test-/tracepoint/gc_hook.c b/ext/-test-/tracepoint/gc_hook.c
index 54b469d..5fd46fa 100644
--- a/ext/-test-/tracepoint/gc_hook.c
+++ b/ext/-test-/tracepoint/gc_hook.c
@@ -42,14 +42,12 @@ set_gc_hook(VALUE module, VALUE proc, rb_event_flag_t event, const char *tp_str, https://github.com/ruby/ruby/blob/trunk/ext/-test-/tracepoint/gc_hook.c#L42
 {
     VALUE tpval;
     ID tp_key = rb_intern(tp_str);
-    ID proc_key = rb_intern(proc_str);
 
     /* disable previous keys */
     if (rb_ivar_defined(module, tp_key) != 0 &&
 	RTEST(tpval = rb_ivar_get(module, tp_key))) {
 	rb_tracepoint_disable(tpval);
 	rb_ivar_set(module, tp_key, Qnil);
-	rb_ivar_set(module, proc_key, Qnil);
     }
 
     if (RTEST(proc)) {
@@ -59,7 +57,6 @@ set_gc_hook(VALUE module, VALUE proc, rb_event_flag_t event, const char *tp_str, https://github.com/ruby/ruby/blob/trunk/ext/-test-/tracepoint/gc_hook.c#L57
 
 	tpval = rb_tracepoint_new(0, event, gc_start_end_i, (void *)proc);
 	rb_ivar_set(module, tp_key, tpval);
-	rb_ivar_set(module, proc_key, proc); /* GC guard */
 	rb_tracepoint_enable(tpval);
     }
 
diff --git a/test/-ext-/tracepoint/test_tracepoint.rb b/test/-ext-/tracepoint/test_tracepoint.rb
index 79ba090..9d16796 100644
--- a/test/-ext-/tracepoint/test_tracepoint.rb
+++ b/test/-ext-/tracepoint/test_tracepoint.rb
@@ -62,9 +62,11 @@ class TestTracepointObj < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/-ext-/tracepoint/test_tracepoint.rb#L62
     bug8492 = '[ruby-dev:47400] [Bug #8492]: infinite after_gc_start_hook reentrance'
     assert_nothing_raised(Timeout::Error, bug8492) do
       assert_in_out_err(%w[-r-test-/tracepoint], <<-'end;', /\A[1-9]/, timeout: 2)
-        stress, GC.stress = GC.stress, false
         count = 0
-        Bug.after_gc_start_hook = proc {count += 1}
+        hook = proc {count += 1}
+        def run(hook)
+        stress, GC.stress = GC.stress, false
+        Bug.after_gc_start_hook = hook
         begin
           GC.stress = true
           3.times {Object.new}
@@ -72,6 +74,8 @@ class TestTracepointObj < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/-ext-/tracepoint/test_tracepoint.rb#L74
           GC.stress = stress
           Bug.after_gc_start_hook = nil
         end
+        end
+        run(hook)
         puts count
       end;
     end
-- 
cgit v0.10.2


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

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