ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:89548] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled
       [not found] <redmine.issue-15250.20181024130534@ruby-lang.org>
@ 2018-10-24 13:05 ` hi
  2018-12-07 16:53 ` [ruby-core:90372] " alanwucanada
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 4+ messages in thread
From: hi @ 2018-10-24 13:05 UTC (permalink / raw)
  To: ruby-core

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

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

* 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/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:90372] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled
       [not found] <redmine.issue-15250.20181024130534@ruby-lang.org>
  2018-10-24 13:05 ` [ruby-core:89548] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled hi
@ 2018-12-07 16:53 ` alanwucanada
  2018-12-10 17:13 ` [ruby-core:90406] " hi
  2019-03-12 23:40 ` [ruby-core:91801] " nagachika00
  3 siblings, 0 replies; 4+ messages in thread
From: alanwucanada @ 2018-12-07 16:53 UTC (permalink / raw)
  To: ruby-core

Issue #15250 has been updated by alanwu (Alan Wu).


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

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

* 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/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:90406] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled
       [not found] <redmine.issue-15250.20181024130534@ruby-lang.org>
  2018-10-24 13:05 ` [ruby-core:89548] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled hi
  2018-12-07 16:53 ` [ruby-core:90372] " alanwucanada
@ 2018-12-10 17:13 ` hi
  2019-03-12 23:40 ` [ruby-core:91801] " nagachika00
  3 siblings, 0 replies; 4+ messages in thread
From: hi @ 2018-12-10 17:13 UTC (permalink / raw)
  To: ruby-core

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/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:91801] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled
       [not found] <redmine.issue-15250.20181024130534@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2018-12-10 17:13 ` [ruby-core:90406] " hi
@ 2019-03-12 23:40 ` nagachika00
  3 siblings, 0 replies; 4+ messages in thread
From: nagachika00 @ 2019-03-12 23:40 UTC (permalink / raw)
  To: ruby-core

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/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-03-12 23:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-15250.20181024130534@ruby-lang.org>
2018-10-24 13:05 ` [ruby-core:89548] [Ruby trunk Bug#15250] Concurrent fibers segfault when thread caching is disabled hi
2018-12-07 16:53 ` [ruby-core:90372] " alanwucanada
2018-12-10 17:13 ` [ruby-core:90406] " hi
2019-03-12 23:40 ` [ruby-core:91801] " nagachika00

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).