diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | test/ruby/test_trace.rb | 12 | ||||
-rw-r--r-- | thread.c | 4 | ||||
-rw-r--r-- | version.h | 6 |
4 files changed, 25 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Wed Sep 1 12:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * thread.c (ruby_suppress_tracing): restore the state and invoke + the func with normal state. a patch from Satoshi Shiba <shiba + AT rvm.jp> at [ruby-dev:42162]. [ruby-core:31783] + Tue Aug 31 21:10:23 2010 Tanaka Akira <akr@fsij.org> * ext/pathname/pathname.c (path_exist_p): Pathname#exist? translated diff --git a/test/ruby/test_trace.rb b/test/ruby/test_trace.rb index 45bc599314..775c458fb1 100644 --- a/test/ruby/test_trace.rb +++ b/test/ruby/test_trace.rb @@ -46,4 +46,16 @@ class TestTrace < Test::Unit::TestCase ensure untrace_var :$x end + + def test_trace_break + bug2722 = '[ruby-core:31783]' + a = Object.new.extend(Enumerable) + def a.each + yield + end + assert(Thread.start { + Thread.current.add_trace_func(proc{}) + a.any? {true} + }.value, bug2722) + end end @@ -4099,6 +4099,7 @@ ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always) rb_thread_t *th = GET_THREAD(); int state, tracing; volatile int raised; + volatile int outer_state; VALUE result = Qnil; if ((tracing = th->tracing) != 0 && !always) { @@ -4109,6 +4110,8 @@ ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always) } raised = rb_threadptr_reset_raised(th); + outer_state = th->state; + th->state = 0; PUSH_TAG(); if ((state = EXEC_TAG()) == 0) { @@ -4124,6 +4127,7 @@ ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always) if (state) { JUMP_TAG(state); } + th->state = outer_state; return result; } @@ -1,11 +1,11 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_RELEASE_DATE "2010-08-31" +#define RUBY_RELEASE_DATE "2010-09-01" #define RUBY_PATCHLEVEL -1 #define RUBY_BRANCH_NAME "trunk" #define RUBY_RELEASE_YEAR 2010 -#define RUBY_RELEASE_MONTH 8 -#define RUBY_RELEASE_DAY 31 +#define RUBY_RELEASE_MONTH 9 +#define RUBY_RELEASE_DAY 1 #include "ruby/version.h" |