Project

General

Profile

Actions

Bug #15250

closed

Concurrent fibers segfault when thread caching is disabled

Added by qyliss (Alyssa Ross) about 6 years ago. Updated almost 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.0dev (2018-10-19) [x86_64-darwin17]
[ruby-core:89548]

Description

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.)

Updated by alanwu (Alan Wu) about 6 years ago

Sounds like a duplicate of #14561. It should be fixed on trunk already.

Updated by qyliss (Alyssa Ross) about 6 years ago

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

Actions #3

Updated by nagachika (Tomoyuki Chikanaga) almost 6 years ago

  • Status changed from Open to Closed
  • Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) almost 6 years ago

  • Backport changed from 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: DONE

Backporting was done at r66111.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0