[ruby-core:104572] [Ruby master Bug#18031] Nested TracePoint#enable with target crashes
From:
merch-redmine@...
Date:
2021-07-10 00:01:33 UTC
List:
ruby-core #104572
Issue #18031 has been updated by jeremyevans0 (Jeremy Evans).
I've submitted a pull request to fix this crash: https://github.com/ruby/ruby/pull/4640
I noticed two other issues:
1. Tracepoints leak memory. I think this is definitely a bug. Example code:
```ruby
loop do
tp = TracePoint.new(:call){}
tp.enable
tp.disable
end
```
2. Use multiple tracepoints on the same target ends up with the second tracepoint overwriting the first. So inside the `two.enable` block in the original code, if you call `foo`, the `one` tracepoint isn't called, and after the `two.enable` block (still inside the `one.enable` block), neither tracepoint is called. I'm not sure whether this is a bug, but the behavior seems suprising.
----------------------------------------
Bug #18031: Nested TracePoint#enable with target crashes
https://bugs.ruby-lang.org/issues/18031#change-92853
* Author: alanwu (Alan Wu)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Found this crash while looking at tracing related code.
Haven't had time to dig deeper, so I'm making a ticket for now.
```ruby
one = TracePoint.new(:call) {}
two = TracePoint.new(:call) {}
obj = Object.new
obj.define_singleton_method(:foo) {} # a bmethod
foo = obj.method(:foo)
one.enable(target: foo) do
two.enable(target: foo) {}
end
```
It crashes on 2.6.5 and master (a7c85cc).
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>