Subject: Re: kern/31572: [dM] tty MIN>1 TIME>0 O_NONBLOCK spins
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 10/13/2005 15:31:25
The following reply was made to PR kern/31572; it has been noted by GNATS.
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc:
Subject: Re: kern/31572: [dM] tty MIN>1 TIME>0 O_NONBLOCK spins
Date: Thu, 13 Oct 2005 11:30:19 -0400
On Oct 13, 3:59am, mouse@Rodents.Montreal.QC.CA (der Mouse) wrote:
-- Subject: kern/31572: [dM] tty MIN>1 TIME>0 O_NONBLOCK spins
| >Number: 31572
| >Category: kern
| >Synopsis: When MIN>1 TIME>0, poll() on tty succeeds but read EAGAINs
| >Confidential: no
| >Severity: serious
| >Priority: low
| >Responsible: kern-bug-people
| >State: open
| >Class: sw-bug
| >Submitter-Id: net
| >Arrival-Date: Thu Oct 13 03:59:00 +0000 2005
| >Originator: der Mouse
| >Release: NetBSD 2.0, also present in 1.4T, probably others
| >Organization:
| Dis-
| >Environment:
| First seen on 1.4T sparc. Tested present on 2.0 i386. Code
| inspection makes me suspect it's still present in -current.
| >Description:
| On a tty (tested only on pseudo-ttys, but code inspection makes
| me think it applies to all ttys), when c_cc[VMIN] > 1 and
| c_cc[VTIME] > 0 (and ICANON is off), and non-blocking I/O is
| turned on, then poll() returns indicating readable as soon as
| one character is typed, but a read returns showing EWOULDBLOCK
| until VMIN characters have been received. (Presumably if
| non-blocking I/O were turned off, read would block instead,
| which is also wrong but not quite as noisily so.)
|
| I've marked this as serious/low, serious because it is fairly
| serious for poll and read to disagree like this, but low
| because it obviously doesn't break much or it would have been
| found and fixed long ago.
| >How-To-Repeat:
| Try the above conditions. Here's a test program. Compile it
| (no particular options needed for me on 2.0 i386 or 1.4T sparc)
| and run it with no arguments. Type a character and watch the
| flood of dots (type a second character to end it; interrupting
| it may leave your tty state hosed).
Isn't that because VTIME expires? linux is behaving the same way.
christos