From: yura.des@... Date: 2021-01-05T21:25:18+00:00 Subject: [ruby-core:101940] [Ruby master Bug#17489] Ractor segfaults Issue #17489 has been updated by inversion (Yura Babak). During my Ractors tests I had segfaults many times and easy to reproduce (in my environment). The same code crashes on Linux and Windows10 (sometimes with other numbers of iterations or workers). More Ractors seems to increase the segfault rate. And if I add `GC.disable` ��� no crash. So I was looking for a place where to add a report with my code samples. This issue looks like a good place for this. **Test cases:** crash_reused_sha2.rb https://gist.github.com/Inversion-des/fcc7dbb2d9a77a7dba540c29077e5ebf (90% crash, if I uncomment GC.disable ��� no crash) crash_encrypt_big_data_often.rb https://gist.github.com/Inversion-des/a9dbde4eacfa859e5bd7cc8fd8a8049f (50% crash, again uncomment GC.disable ��� no crash) Win10_crash_report.txt https://gist.github.com/Inversion-des/c79ea00407c579b83ebbe00541e20c45 If it doesn't crash for you ��� try to increase number of iterations and data size. My environment: **Linux CentOS 7.9 (VPS)** 4-core CPU 2.6GHz ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] **Windows 10** 2-core CPU 3.6GHz ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32] ---------------------------------------- Bug #17489: Ractor segfaults https://bugs.ruby-lang.org/issues/17489#change-89787 * Author: kirs (Kir Shatrov) * Status: Assigned * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- I was able to boil it down to this script: ```ruby require 'bundler/inline' gemfile do source 'https://rubygems.org' gem "sinatra", "~> 2.1" end require 'sinatra' class App < Sinatra::Base get '/' do 200 end end module Sinatra class Base class << self # patch it to avoid hitting other unsafe things def setup_default_middleware(builder) builder.use Rack::NullLogger end end end end workers = 2.times.map do Ractor.new { App.new } end Ractor.select(*workers) ``` Even though the code doesn't make a lot of sense and Sinatra has other stuff that's not compatible with Ractor, I would not expect user-level Ruby code to segfault. I have attached the crash report and stderr output. ---Files-------------------------------- segfault.dump (44.8 KB) ruby_2020-12-29-002108_Kirs-MacBook-Pro-2.crash (27.9 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: