From: Eric Wong Date: 2013-03-13T11:16:49+09:00 Subject: [ruby-core:53358] Re: [ruby-trunk - Bug #8080][Open] Segfault in rb_fd_set "jonleighton (Jon Leighton)" wrote: > 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. 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...