Issue #8080 has been updated by jonleighton (Jon Leighton).


normalperson (Eric Wong) wrote:
>  Looking at your workaround, I think a better one is "watcher.to_io"
>  method needs to memoize its return value.
>  
>  I think Ruby expects the return value of obj.to_io to be persistent
>  for the lifetime of obj.
>  
>  Making IO.select cache the value of to_io internally might be alright...

It seems that IO.select *does* cache the value of to_io internally. At least that seems to be the case from https://gist.github.com/jonleighton/5172263.

Running the script prints "to_io" once and then hangs.
----------------------------------------
Bug #8080: Segfault in rb_fd_set
https://bugs.ruby-lang.org/issues/8080#change-37643

Author: jonleighton (Jon Leighton)
Status: Assigned
Priority: Normal
Assignee: kosaki (Motohiro KOSAKI)
Category: core
Target version: current: 2.1.0
ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]


I have experienced a segfault with Ruby 2 during an IO.select call:

See https://travis-ci.org/jonleighton/spring/jobs/5393025 or https://gist.github.com/jonleighton/5147785 to see the crash output.

I cannot reproduce on a different version of Linux (Fedora). However I was able to reproduce by downloading a VM image of the Travis CI environment and running the code on there (see http://pivotallabs.com/debugging-travis-builds/ for how to do that).

I tried to produce a simple script to reproduce, but without success. I also tried to build Ruby 2 with debugging symbols, but this did not produce the crash. I'm not sure why - perhaps related to compiler optimisations.

I found a workaround for the crash with https://github.com/jonleighton/spring/commit/c8a7afdd3238ef88bffc2c8f56baa21042400e15.


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