On 2020-03-12 09:05, Thomas Dickey wrote:
If not "correct", it's certainly inconsistent with all other systems.
I noticed it recently:

https://invisible-island.net/ncurses/tack/CHANGES.html#t20200220

https://github.com/cygwinports/tack/issues/1

It's either recently-broken, or just coincidence :-)


Beer fine for you Thomas for copying email-addresses in the reply :-)

Looking at Linux tty line discipline reveals the VMIN and VTIME are ignored if O_NONBLOCK flag is set.

        if (!input_available_p(tty, 0)) {
            up_read(&tty->termios_rwsem);
            tty_buffer_flush_work(tty->port);
            down_read(&tty->termios_rwsem);
            if (!input_available_p(tty, 0)) {
                if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
                    retval = -EIO;
                    break;
                }
                if (tty_hung_up_p(file))
                    break;
                /*
                 * Abort readers for ttys which never actually
                 * get hung up.  See __tty_hangup().
                 */
                if (test_bit(TTY_HUPPING, &tty->flags))
                    break;
                if (!timeout)
                    break; *<= EXIT HERE if VTIME == 0*
                if (file->f_flags & O_NONBLOCK) {
                    retval = -EAGAIN; *<==== EXIT HERE*
                    break;
                }
                if (signal_pending(current)) {
                    retval = -ERESTARTSYS;
                    break;
                }
                up_read(&tty->termios_rwsem);

                timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, *<=== BLOCKING HERE!*
                        timeout);

                down_read(&tty->termios_rwsem);
                continue;
            }
        }

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to