[ruby-core:115727] [Ruby master Bug#19114] Calling TracePoint#enable multiple times causes TracePoint to be activated multiple times

Issue #19114 has been updated by ivoanjo (Ivo Anjo). Nice, thanks for fixing this one! 🙇 ---------------------------------------- Bug #19114: Calling TracePoint#enable multiple times causes TracePoint to be activated multiple times https://bugs.ruby-lang.org/issues/19114#change-105660 * Author: ivoanjo (Ivo Anjo) * Status: Closed * Priority: Normal * ruby -v: ruby 3.2.0preview2 (2022-09-09 master 35cfc9a3bb) [x86_64-darwin20] * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- Howdy 👋! I work for Datadog [on the `ddtrace` gem](https://github.com/DataDog/dd-trace-rb) and I found an issue with TracePoint. ### Background For tracking time spent in Garbage Collection on our Ruby profiler, we use a tracepoint. While doing some experiments around our code, I realized that enabling the same `TracePoint` more than once made it trigger multiple times. ### How to reproduce (Ruby version & script) This can be reproduced with any tracepoint: ```ruby puts RUBY_DESCRIPTION puts "Enabling tracepoint" tracepoint = TracePoint.new(:line) { |tp| p [tp.path, tp.lineno, tp.event] }.tap(&:enable) 5.times { tracepoint.enable } puts "Finished!" ``` ### Expectation and result This is the output of the above script: ``` ruby 3.2.0preview2 (2022-09-09 master 35cfc9a3bb) [x86_64-darwin20] Enabling tracepoint ["<internal:kernel>", 91, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["<internal:trace_point>", 213, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["triggertracepoint.rb", 4, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["<internal:trace_point>", 213, :line] ["triggertracepoint.rb", 5, :line] ["triggertracepoint.rb", 5, :line] ["triggertracepoint.rb", 5, :line] ["triggertracepoint.rb", 5, :line] ["triggertracepoint.rb", 5, :line] ["triggertracepoint.rb", 5, :line] Finished! ``` My expectation is that once enabled, a `TracePoint` fires only once for each event, regardless of how many times `TracePoint#enable` was called. Instead, I see it being called as many times as `#enable` was called. -- https://bugs.ruby-lang.org/
participants (1)
-
ivoanjo (Ivo Anjo)