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

ruby-changes:20551

From: mame <ko1@a...>
Date: Thu, 21 Jul 2011 21:13:04 +0900 (JST)
Subject: [ruby-changes:20551] mame:r32599 (ruby_1_9_3): * backport r32597 from trunk.

mame	2011-07-21 21:12:53 +0900 (Thu, 21 Jul 2011)

  New Revision: 32599

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32599

  Log:
    * backport r32597 from trunk.
    
    * thread.c (set_trace_func, thread_set_trace_func_m): reset tracing
      state when set_trace_func hook is removed.  This is workaround patch
      to force to reset tracing state that is broken by continuation call.
      a patch from James M. Lawrence.  [Feature #4347] [ruby-core:34998]
    
    * test/ruby/test_continuation.rb (class TestContinuation): add a test
      for above.  a patch from James M. Lawrence.

  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/test/ruby/test_continuation.rb
    branches/ruby_1_9_3/thread.c

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 32598)
+++ ruby_1_9_3/ChangeLog	(revision 32599)
@@ -1,3 +1,13 @@
+Thu Jul 21 20:02:11 2011  Yusuke Endoh  <mame@t...>
+
+	* thread.c (set_trace_func, thread_set_trace_func_m): reset tracing
+	  state when set_trace_func hook is removed.  This is workaround patch
+	  to force to reset tracing state that is broken by continuation call.
+	  a patch from James M. Lawrence.  [Feature #4347] [ruby-core:34998]
+
+	* test/ruby/test_continuation.rb (class TestContinuation): add a test
+	  for above.  a patch from James M. Lawrence.
+
 Thu Jul 21 20:59:59 2011  Tanaka Akira  <akr@f...>
 
 	* ext/socket/ancdata.c (discard_cmsg): workaround for MacOS X Lion.
Index: ruby_1_9_3/thread.c
===================================================================
--- ruby_1_9_3/thread.c	(revision 32598)
+++ ruby_1_9_3/thread.c	(revision 32599)
@@ -4347,6 +4347,7 @@
     rb_remove_event_hook(call_trace_func);
 
     if (NIL_P(trace)) {
+	GET_THREAD()->tracing = EVENT_RUNNING_NOTHING;
 	return Qnil;
     }
 
@@ -4403,6 +4404,7 @@
     rb_threadptr_remove_event_hook(th, call_trace_func);
 
     if (NIL_P(trace)) {
+	th->tracing = EVENT_RUNNING_NOTHING;
 	return Qnil;
     }
     thread_add_trace_func(th, trace);
Index: ruby_1_9_3/test/ruby/test_continuation.rb
===================================================================
--- ruby_1_9_3/test/ruby/test_continuation.rb	(revision 32598)
+++ ruby_1_9_3/test/ruby/test_continuation.rb	(revision 32599)
@@ -77,5 +77,48 @@
     }, '[ruby-dev:34802]'
   end
 
+  def tracing_with_set_trace_func
+    cont = nil
+    func = lambda do |*args|
+      @memo += 1
+      cont.call(nil)
+    end
+    cont = callcc { |cc| cc }
+    if cont
+      set_trace_func(func)
+    else
+      set_trace_func(nil)
+    end
+  end
+
+  def test_tracing_with_set_trace_func
+    @memo = 0
+    tracing_with_set_trace_func
+    tracing_with_set_trace_func
+    tracing_with_set_trace_func
+    assert_equal 3, @memo
+  end
+
+  def tracing_with_thread_set_trace_func
+    cont = nil
+    func = lambda do |*args|
+      @memo += 1
+      cont.call(nil)
+    end
+    cont = callcc { |cc| cc }
+    if cont
+      Thread.current.set_trace_func(func)
+    else
+      Thread.current.set_trace_func(nil)
+    end
+  end
+
+  def test_tracing_with_thread_set_trace_func
+    @memo = 0
+    tracing_with_thread_set_trace_func
+    tracing_with_thread_set_trace_func
+    tracing_with_thread_set_trace_func
+    assert_equal 3, @memo
+  end
 end
 

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

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