diff --git a/ChangeLog b/ChangeLog index 85db0fbc4b..f604e304b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Sep 1 12:56:36 2010 Nobuyoshi Nakada + + * thread.c (ruby_suppress_tracing): restore the state and invoke + the func with normal state. a patch from Satoshi Shiba at [ruby-dev:42162]. [ruby-core:31783] + Tue Aug 31 21:10:23 2010 Tanaka Akira * 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 diff --git a/thread.c b/thread.c index 6c783c9dc9..4063fd8dba 100644 --- a/thread.c +++ b/thread.c @@ -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; } diff --git a/version.h b/version.h index 5afb65ebfd..b2aca28520 100644 --- a/version.h +++ b/version.h @@ -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"