Actions
Bug #19364
openIssue with tracepoint enable/disable across ractors
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
Like0
Like0