[ruby-core:116104] [Ruby master Bug#20167] Code execution isn't recorded in Ractor

Issue #20167 has been reported by shia (Sangyong Sim). ---------------------------------------- Bug #20167: Code execution isn't recorded in Ractor https://bugs.ruby-lang.org/issues/20167 * Author: shia (Sangyong Sim) * Status: Open * Priority: Normal * ruby -v: 3.3.0 * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- ## reproduction code ```ruby # frozen-string-literal: true require "coverage" Coverage.start require_relative "./some_lib" # # some_lib.rb # class C # def hoge(i) # i # end # end r = Ractor.new do loop do v = Ractor.receive ret_v = C.new.hoge(v) Ractor.yield ret_v end end 2.times do |i| r << i r.take end Coverage.result.each do |file, lines| if file.include?("some_ractor_lib") if lines == [1, 1, 2, nil, nil] puts "OK" else puts "expected: [1, 1, 2, nil, nil]" puts "actual: #{lines.inspect}" end end end ``` ## Target ruby version 3.2.0+ affected -- https://bugs.ruby-lang.org/

Issue #20167 has been updated by mame (Yusuke Endoh). At this time, the coverage library should be able to only measure coverage for Ractor that invoked `Coverage.start`. (I have not tried but invoking `Coverage.start` in multiple Ractors may cause fatal problems.) To improve this situation, probabily we need the following big modification. * `Covearge.start` registers hooks to all existing Ractors. * The hook measures coverage data per Ractor, not globally. * `Coverage.result` aggregates all coverage data from every Ractor. ---------------------------------------- Bug #20167: Code execution isn't recorded in Ractor https://bugs.ruby-lang.org/issues/20167#change-106102 * Author: shia (Sangyong Sim) * Status: Open * Priority: Normal * ruby -v: 3.3.0 * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- ## reproduction code ```ruby # frozen-string-literal: true require "coverage" Coverage.start require_relative "./some_lib" # # some_lib.rb # class C # def hoge(i) # i # end # end r = Ractor.new do loop do v = Ractor.receive ret_v = C.new.hoge(v) Ractor.yield ret_v end end 2.times do |i| r << i r.take end Coverage.result.each do |file, lines| if file.include?("some_ractor_lib") if lines == [1, 1, 2, nil, nil] puts "OK" else puts "expected: [1, 1, 2, nil, nil]" puts "actual: #{lines.inspect}" end end end ``` ## Target ruby version 3.2.0+ affected -- https://bugs.ruby-lang.org/
participants (2)
-
mame (Yusuke Endoh)
-
shia (Sangyong Sim)