cvs commit: src/tools/regression/fifo/fifo_open Makefile fifo_open.c

Bruce Evans bde at zeta.org.au
Mon Sep 12 22:18:17 PDT 2005


On Mon, 12 Sep 2005, John-Mark Gurney wrote:

> Robert Watson wrote this message on Sun, Sep 11, 2005 at 13:03 +0000:
>> rwatson     2005-09-11 13:03:36 UTC
>>
>>   FreeBSD src repository
>>
>>   Added files:
>>     tools/regression/fifo/fifo_open Makefile fifo_open.c
>>   Log:
>>   Add fifo_open, a basic regression test for opening fifos, which tests
>>   the blocking and non-blocking forms of open based on the POSIX spec for
>>   now O_NONBLOCK should be handled.
>
> I assume we aren't going to follow the useless POSIX spec for handling
> O_NONBLOCK'ing reads wrt select and friends?  If you're interested in a
> basic test case, I can send you one...
>
> (That selecting on a fifo for read that doesn't have a writer will
> return true, due to the fact that EOF is available for reading on a
> O_NONBLOCK fifo.)

PRs 76144 and 76525 give test cases for how not following the useful
POSIX spec (for this and more directly by not even considering setting
POLLHUP for poll()) breaks things.

Perhaps the correct behaviour is for select() and poll() to return on
EOF iff the EOF has occurred while there are any readers or any data.
EOF should be sticky but not persist forever.  It must be fairly sticky
so that readers don't have races seeing it, and it must not persist
forever so that POLLHUP works right for more than 1 "connection" to
the fifo.  I think a "connection" to a fifo should persist until not
only all readers and writers have gone away, but until all data has
been read and maybe for a few msec longer of inactivity to give straggling
readers a chance to see the "hangup".

Bruce


More information about the cvs-all mailing list