Issue #15250 has been updated by qyliss (Alyssa Ross).


Yes! I can confirm that this now appears to be fixed on trunk.

----------------------------------------
Bug #15250: Concurrent fibers segfault when thread caching is disabled
https://bugs.ruby-lang.org/issues/15250#change-75555

* Author: qyliss (Alyssa Ross)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-10-19) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
500.times do
  Array.new(200) { |n|
    Thread.new {
      Fiber.new {
        readable = open(__FILE__)
        Fiber.yield readable.read(1)
      }.resume
    }
  }.each(&:join)
end
~~~

Getting the segfault doesn°«t require nearly that many iterations or threads, I just made sure to do it a lot so I could reproduce it consistently. I°«ve seen it fail with as few as 20 threads.

The IO isn°«t necessary either. The Fiber just needs to have some work to do. I got it to break once by just yielding °»hello world°…. The IO is more consistent, though.

I came across this bug in the wild when using the fastimage gem in a few threads (from middleman), which uses a Fiber to wrap IO operations.

I°«ve been able to reproduce on macOS 10.13, and SmartOS 2017Q4 (Solaris). I have not been able to reproduce on Linux.

As best I can tell, the crash was introduced by r60440. It is present in Ruby 2.5.x when compiled with the default configuration. It is not present in 2.4.x. It°«s also present in trunk, but only if USE_THREAD_CACHE is disabled. (Or at least, I can°«t reproduce it with thread caching enabled.)



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>