Project

General

Profile

Actions

Feature #13483

closed

TracePoint#enable with block for thread-local trace

Added by ko1 (Koichi Sasada) over 4 years ago. Updated about 3 years ago.

Status:
Rejected
Priority:
Normal
Target version:
[ruby-core:80791]

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

Actions

Also available in: Atom PDF