From: nagachika00@... Date: 2019-03-12T23:40:12+00:00 Subject: [ruby-core:91801] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled Issue #15250 has been updated by nagachika (Tomoyuki Chikanaga). 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. ---------------------------------------- Bug #15250: Concurrent fibers segfault when thread caching is disabled https://bugs.ruby-lang.org/issues/15250#change-77074 * Author: qyliss (Alyssa Ross) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0dev (2018-10-19) [x86_64-darwin17] * Backport: 2.3: DONTNEED, 2.4: DONTNEED, 2.5: DONE ---------------------------------------- ~~~ 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: