From: merch-redmine@... Date: 2021-07-10T00:01:33+00:00 Subject: [ruby-core:104572] [Ruby master Bug#18031] Nested TracePoint#enable with target crashes 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: