Project

General

Profile

Actions

Bug #16889

closed

TracePoint.enable { ... } also activates the TracePoint for other threads, even outside the block

Bug #16889: TracePoint.enable { ... } also activates the TracePoint for other threads, even outside the block

Added by Eregon (Benoit Daloze) over 5 years ago. Updated over 3 years ago.

Status:
Closed
Target version:
-
[ruby-core:98355]

Description

threads = [] inspects = [] trace = TracePoint.new(:line) do |tp| threads << Thread.current inspects << tp.inspect end done = false thread = Thread.new do Thread.pass until done end trace.enable do line_event = true done = true sleep 1 end thread.join # Expected only within enable block (lines 14-16) puts inspects # Expected just 1 p threads.uniq 

Results in:

$ ruby tpbug.rb ruby tpbug.rb #<TracePoint:line@tpbug.rb:14> #<TracePoint:line@tpbug.rb:15> #<TracePoint:line@tpbug.rb:16> #<TracePoint:line@tpbug.rb:10> [#<Thread:0x00005571134e3340 run>, #<Thread:0x00005571138ac828@tpbug.rb:9 dead>] 

But I expected:

#<TracePoint:line@tpbug.rb:14> #<TracePoint:line@tpbug.rb:15> #<TracePoint:line@tpbug.rb:16> [#<Thread:0x00005571134e3340 run>] 

Because the RDoc says:

If a block is given, the trace will only be enabled within the scope of the block. 

For background I'm trying to improve the TracePoint specs in ruby/spec, but they are proving quite unreliable due to this.

@ko1 (Koichi Sasada) Thoughts?

Actions

Also available in: PDF Atom