diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index 6021038fe9..29b69b7ce3 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -2127,4 +2127,21 @@ class TestSetTraceFunc < Test::Unit::TestCase tp.enable {obj.example} assert ok, "return event should be emitted" end + + def test_disable_local_tracepoint_in_trace + assert_normal_exit <<-EOS + def foo + trace = TracePoint.new(:b_return){|tp| + tp.disable + } + trace.enable(target: method(:bar)) + end + def bar + 100.times{|i| + foo; foo + } + end + bar + EOS + end end diff --git a/version.h b/version.h index f7cc71aa27..fa078b407c 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.6.3" #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 94 +#define RUBY_PATCHLEVEL 95 #define RUBY_RELEASE_YEAR 2019 #define RUBY_RELEASE_MONTH 8 diff --git a/vm_trace.c b/vm_trace.c index 82c5249abc..f8205db4bb 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -198,9 +198,6 @@ clean_hooks(const rb_execution_context_t *ec, rb_hook_list_t *list) } else { /* local events */ - if (list->events == 0) { - ruby_xfree(list); - } } }