Project

General

Profile

Actions

Bug #19364

open

Issue with tracepoint enable/disable across ractors

Added by luke-gru (Luke Gruber) over 1 year ago. Updated about 1 year ago.

Status:
Assigned
Target version:
-
[ruby-core:111960]

Description

This sometimes segfaults:

def test_enable_disable_in_multiple_ractors_with_target
  rs = []
  100.times do |i|
    # setup new iseqs
    Kernel.define_method :"my_method_to_change_for_tracing_#{i}" do
      true
    end
  end
  100.times do |i|
    rs << Ractor.new(i) do |j|
      meth = :"my_method_to_change_for_tracing_#{j}"
      tp = TracePoint.new(:line) { } # local to ractor
      100.times do
        tp.enable(target: method(meth)) # change iseq internals of given method, should be done with lock
        tp.disable # disable hooks should hold lock too, changes method definition internals
      end
    end
  end
  rs.each(&:take) # shouldn't raise
end
test_enable_disable_in_multiple_ractors_with_target()

Changing iseq internals is done without the VM lock. This is true in Tracepoint#enable and Tracepoint#disable methods.
I have a patch coming.

Actions

Also available in: Atom PDF

Like0
Like0