This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: libstdc++/9533: Regression: Can't read from tty with ifstream


>     Patching: indeed, reverting this hunk of 6746 commit:
>     
>     +
>     +	    // Set input to nonblocking for fifos.
>     +	    if (__mode & ios_base::in)
>     +	      fcntl(this->fd(), F_SETFL, O_NONBLOCK);
>     +
>     
>     Fixes the problem without regressing on 6746.

Interesting. I would have thought that removing this would
cause the call to underflow() in basic_filebuf::open() to
block, causing the test case to wait for input *before*
printing out the prompt (this seems to be the reason that
non-blocking input is specified).

So far, this is what I think is going on:
* non-blocking input is specified so underflow() doesn't
  block (which is wrong, underflow() should block).
* underflow() must not block because it is called from
  open() which must not block.
* open() calls underflow() so that in_avail() will return
  non-zero after open() (libstdc++/6746).

However, I don't see how calling underflow() from open()
fixes libstdc++/6746. Unless I am missing something,
readsome will return up to BUFSIZ characters, and then
return 0 until the end of time.

Petur


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]