From: "nagachika (Tomoyuki Chikanaga)" Date: 2022-03-21T07:53:54+00:00 Subject: [ruby-core:107998] [Ruby master Bug#17529] Ractor Segfaults with GC enabled Issue #17529 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE ruby_3_0 a72b7b898c69a116d754d599e8bb061761015255 merged revision(s) d0d6227a0da5925acf946a09191f172daf53baf2,fff1edf23ba28267bf57097c269f7fa87530e3fa. ---------------------------------------- Bug #17529: Ractor Segfaults with GC enabled https://bugs.ruby-lang.org/issues/17529#change-96952 * Author: prajjwal (Prajjwal Singh) * Status: Assigned * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] * Backport: 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE ---------------------------------------- I've been benchmarking `Ractor` on my machine with the following naive prime number generator: ```ruby # frozen_string_literal: true def prime?(n) 2.upto(n - 1).none? { |i| n % i == 0 } end NUM_WORKERS = ARGV[0].to_i producer = Ractor.new do i = 1000000 loop { Ractor.yield i; i += 1 } end workers = (1..NUM_WORKERS).map do Ractor.new producer do |producer| while n = producer.take Ractor.yield [n, prime?(n)] end end end loop do _r, ( number, prime ) = Ractor.select(*workers) p number if prime end ``` The code inevitably segfaults, and it appears to be the garbage collector. If I stick `GC.disable` in there, the code happily chugs along for several minutes on end without a problem. ---Files-------------------------------- ractor.crash (22.5 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: