From: Eric Wong Date: 2009-11-22T07:43:19+09:00 Subject: Re: issues with Kernel#select Tim Pease wrote: > Waking up a thread that is waiting in Kernel#select does not appear to work in ruby 1.9 Can someone please confirm that this is the case. Is this the intended behavior, or is this a bug? > > > > cat a.rb > require 'socket' > > pair = Socket.pair(Socket::AF_UNIX, Socket::SOCK_STREAM, 0) > t = Thread.new { > Kernel.select pair, nil, nil, nil > puts "Thread is about to exit ..." > } > t.wakeup > t.join > > > ruby --version > ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10] > > > ruby a.rb > Thread is about to exit ... > > > ruby1.9 --version > ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-darwin10] > > > ruby1.9 a.rb #=> hangs forever!!!! > > > > Any thoughts out there ??? Hi Tim, 1.9 is actually doing what I expect it to do, that is waiting indefinitely because the timeout argument for select is nil. I might consider the 1.8.7 behavior a bug, but then again the underlying select(2) syscall is allowed to have spurious wakeups. So even without a timeout argument, select may always return even when nothing is readable. -- Eric Wong