apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <...@apache.org>
Subject Re: Tests hanging on Windows
Date Thu, 12 Dec 2002 02:05:11 GMT

On Wed, 11 Dec 2002 rbb@apache.org wrote:

> The tests currently hang in testpipe on Windows.  The problem is the test
> that tries to read from the pipe with a timeout.  The test doesn't write
> anything to the pipe before reading, although it does set a 1 second
> timeout.  However, on Windows, the pipe timeout is never popping.  I
> haven't had much time to debug, so if another Windows person wants to look
> at it.  This should be an easy one to debug quickly.

I've done more research.  Wow, this is ugly.  Basically, Windows doesn't
allow you to open anonymous pipes in a non-blocking mode.  That means that
it is impossible to timeout a pipe read/write.  Now for the good news.
There are two possible solutions.

1)  Switch to using named pipes for platforms that support them.  This has
the advantage that we can open the pipe in overlapped mode, but it won't
work on older versions of Windows (9x, ME specifically).  This also means
that APR itself will have a need to get a temporary filename, because we
will need to have a name for the named pipe, but we can essentially forget
the name of the pipe immediately.

2)  The second option is to do what cygwin does.  Namely, instead of
calling ReadFile on the pipe, call PeekNamedPipe repeatedly until there is
data or the timeout pops.  This is moderately ugly, because it means that
we won't see the data as soon as it is available to be read.  It also
means that an idle process that is just reading on the pipe will actually
take some resources occaisionally (I would assume once every second or so)
to check if there has been any activity.

Does anybody have any opinions?  I can't believe that we have gone this
long without timeouts working on pipes on Windows.


View raw message