On Wed, 31 Jan 2007 gwtmp01 / mac.com wrote:

>
> On Jan 27, 2007, at 8:13 PM, James Edward Gray II wrote:
>
>> Kenneth Kalmer has brought up a HighLine issue and I'm trying to look into 
>> it.  Oddly, it seems to happen when interacting with the Net::HTTP library. 
>> I've narrowed it done to the following example on my box:
>
> Here is a simpler example that illustrates the issue:
>
>  Thread.new { }
>  p $stdin.eof?
>
> As Eric Hodel pointed out, EOF on a terminal device is detected by trying to
> read from the device.  It appears that *prior* to the creation of a thread,
> a read on a terminal device will simply block waiting for some activity on
> the device; either actual data or indication of an eof condition (someone
> typing control-d).
>
> *After* a thread has been created, Ruby's green thread implementation kicks
> in.  This means that the read caused by IO#eof? on the terminal device is
> not allowed to block.  Instead it fails as an interrupted system call, which
> is interpreted by IO#eof? as an end of file condition.  This is true even if
> the main thread is the only running thread.
>
> James' original example used Net::HTTP, which uses Timeout, which creates a
> thread to gain control of code that may block (i.e., an HTTP connection to a
> remote host).
>
> I don't know enough about Ruby's thread implementation to know if this is a
> bug or a feature.  My hunch is that IO#eof? needs to be fixed so that an
> interrupted system call doesn't get interpreted as an end of file condition.
> Another change would be to turn off the software interrupt that is used to
> multiplex IO activity by threads when only the main thread is running.
>
> Gary Wright
>

sounds quite reasonable.  however, on my box:

   harp:~ > cat a.rb
   Thread.new { }
   p $stdin.eof?

   harp:~ > ruby a.rb  # and then type ctrl-d
   true

   harp:~ > ruby -v
   ruby 1.8.4 (2005-12-01) [i686-linux]

   harp:~ > uname -srm
   Linux 2.4.21-47.0.1.EL i686

so looks to be a bsd/mac issue?

-a
-- 
we can deny everything, except that we have the possibility of being better.
simply reflect on that.
- the dalai lama