From: ben.govero@... Date: 2018-03-05T19:45:01+00:00 Subject: [ruby-core:85940] [Ruby trunk Bug#14578] Forking a child process inside of a mutex crashes the ruby interpreter Issue #14578 has been reported by bengovero (Ben Govero). ---------------------------------------- Bug #14578: Forking a child process inside of a mutex crashes the ruby interpreter https://bugs.ruby-lang.org/issues/14578 * Author: bengovero (Ben Govero) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.5.0 * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- 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_bens-mac.crash (36.3 KB) ruby_2018-03-05-133827-1_bens-mac.crash (36.3 KB) ruby_2018-03-05-133827-2_bens-mac.crash (36.3 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: