зеркало из https://github.com/github/ruby.git
[Bug #19114] Fix for multiple calls of TracePoint#enable
This commit is contained in:
Родитель
1f22245ed5
Коммит
06e2fbb826
|
@ -2459,6 +2459,18 @@ CODE
|
|||
assert_equal [:tp1, 1, 2, :tp2, 3], events
|
||||
end
|
||||
|
||||
def test_multiple_enable
|
||||
ary = []
|
||||
trace = TracePoint.new(:call) do |tp|
|
||||
ary << tp.method_id
|
||||
end
|
||||
trace.enable
|
||||
trace.enable
|
||||
foo
|
||||
trace.disable
|
||||
assert_equal(1, ary.count(:foo), '[Bug #19114]')
|
||||
end
|
||||
|
||||
def test_multiple_tracepoints_same_bmethod
|
||||
events = []
|
||||
tp1 = TracePoint.new(:return) do |tp|
|
||||
|
|
|
@ -1197,6 +1197,10 @@ rb_tracepoint_enable(VALUE tpval)
|
|||
rb_raise(rb_eArgError, "can't nest-enable a targeting TracePoint");
|
||||
}
|
||||
|
||||
if (tp->tracing) {
|
||||
return Qundef;
|
||||
}
|
||||
|
||||
if (tp->target_th) {
|
||||
rb_thread_add_event_hook2(tp->target_th->self, (rb_event_hook_func_t)tp_call_trace, tp->events, tpval,
|
||||
RUBY_EVENT_HOOK_FLAG_SAFE | RUBY_EVENT_HOOK_FLAG_RAW_ARG);
|
||||
|
|
Загрузка…
Ссылка в новой задаче