diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | eval.c | 6 | ||||
-rw-r--r-- | test/ruby/test_settracefunc.rb | 5 | ||||
-rw-r--r-- | version.h | 2 |
4 files changed, 16 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Mon Dec 14 03:21:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * eval.c (call_trace_func): remove the trace hook if any exception + raised. [ruby-list:46515] + Mon Dec 14 02:27:32 2009 Yusuke Endoh <mame@tsg.ne.jp> * hash.c (rb_hash): always return a fixnum value because a return @@ -2772,7 +2772,11 @@ call_trace_func(event, node, self, id, klass) tracing = 0; ruby_current_node = node_save; SET_CURRENT_SOURCE(); - if (state) JUMP_TAG(state); + if (state) { + trace_func = 0; + rb_remove_event_hook(call_trace_func); + JUMP_TAG(state); + } } static VALUE diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index 14d6679407..765600f34d 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -135,4 +135,9 @@ class TestSetTraceFunc < Test::Unit::TestCase assert_equal(["c-call", 131, :set_trace_func, Kernel], events.shift) assert_equal([], events) end + + def test_bad_trace + e = Class.new(RuntimeError) + assert_raise(e) {set_trace_func proc{raise e}} + end end @@ -2,7 +2,7 @@ #define RUBY_RELEASE_DATE "2009-12-14" #define RUBY_VERSION_CODE 187 #define RUBY_RELEASE_CODE 20091214 -#define RUBY_PATCHLEVEL 228 +#define RUBY_PATCHLEVEL 229 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 |