Feature #13483
closedTracePoint#enable with block for thread-local trace
Description
Summary¶
TracePoint#enable with block should enable thread-local trace.
Current behavior¶
TracePoint#enable enables TracePoint for all of threads, even if it called with do...end blcok.
t1 = Thread.new{
loop{
x = 1
}
}
th = nil
trace = TracePoint.new(:line){|tp|
if th != Thread.current
p th = Thread.current
end
}
trace.enable do
loop{
a = 1
b = 2
}
end
This program shows both main thread and thread t1 hooked by line events.
Problem¶
However, usually trace.enable do ... end imply the programmer want to enable hooks only for this block, not for other threads.
For example, Ruby's test for TracePoint skips hooks on other threads.
https://github.com/ruby/ruby/blob/trunk/test/ruby/test_settracefunc.rb#L620
Proposal¶
TracePoint#enable with block should enable thread-local trace.
I believe proposed behavior is easy to use.
Consideration¶
(1) It breaks backward compatibility. Is it acceptable?
(2) What happen on created threads? Should inherit thread-local hooks or ignore them?
I want to ask users of TracePoint.
Thanks,
Koichi