Project

General

Profile

Actions

Bug #17489

open

Ractor segfaults

Added by kirs (Kir Shatrov) 10 months ago. Updated 10 months ago.

Status:
Assigned
Priority:
Normal
Target version:
-
ruby -v:
3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
[ruby-core:101797]

Description

I was able to boil it down to this script:

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) segfault.dump kirs (Kir Shatrov), 12/28/2020 09:22 PM
ruby_2020-12-29-002108_Kirs-MacBook-Pro-2.crash (27.9 KB) ruby_2020-12-29-002108_Kirs-MacBook-Pro-2.crash kirs (Kir Shatrov), 12/28/2020 09:22 PM

Related issues

Related to Ruby master - Bug #17529: Ractor Segfaults with GC enabledAssignedko1 (Koichi Sasada)Actions
Actions #1

Updated by kirs (Kir Shatrov) 10 months ago

  • ruby -v set to 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
Actions #2

Updated by kirs (Kir Shatrov) 10 months ago

  • Description updated (diff)

Updated by ko1 (Koichi Sasada) 10 months ago

  • Assignee set to ko1 (Koichi Sasada)
  • Status changed from Open to Assigned

Thank you. I can confirm the reproducing. This issue is maybe from the lack of synchronization for the constant table.

Updated by inversion (Yura Babak) 10 months ago

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]

Actions #5

Updated by marcandre (Marc-Andre Lafortune) 10 months ago

  • Related to Bug #17529: Ractor Segfaults with GC enabled added
Actions

Also available in: Atom PDF