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>