Project

General

Profile

Actions

Bug #14578

closed

Forking a child process inside of a mutex crashes the ruby interpreter

Added by bengovero (Ben Govero) over 6 years ago. Updated over 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:85940]

Description

OS: Mac OS X 10.13.3 (High Sierra)
Affects ruby versions 2.5.0 and 2.6.0preview1

Issue not present in 2.4.1

Consider the following script. I contrived it as an experiment for a more complicated project. We have a resource that we want to synchronize access to, but we want to fork the process when actually using the resource. This script works in 2.4.1, but not in 2.5.0 or beyond.

class Synchronizer

  def initialize
    @mutex = Mutex.new
  end

  def use(&block)
    @mutex.synchronize do
      Process.fork do
        block.call
      end

      Process.wait
    end
  end

end

@s = Synchronizer.new

5.times do |i|
  Thread.new do
    @s.use do
      puts "block #{i}"
    end
  end
end

sleep 10

The error I get when the interpreter crashes is: [BUG] unexpected THREAD_KILLED

Is this a crazy implementation? Or a real bug?


Files

ruby_2018-03-05-133827-1_bens-mac.crash (36.3 KB) ruby_2018-03-05-133827-1_bens-mac.crash bengovero (Ben Govero), 03/05/2018 07:43 PM
ruby_2018-03-05-133827_bens-mac.crash (36.3 KB) ruby_2018-03-05-133827_bens-mac.crash bengovero (Ben Govero), 03/05/2018 07:43 PM
ruby_2018-03-05-133827-2_bens-mac.crash (36.3 KB) ruby_2018-03-05-133827-2_bens-mac.crash bengovero (Ben Govero), 03/05/2018 07:43 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0