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 16:35:13 GMT

On Thu, 12 Dec 2002, Bill Stoddard wrote:

> > 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.
> Take a look at file_io/win32/readwrite.c. Search for PeekNamedPipe.  Then take a
> peek at apr_create_nt_pipe in pipe.c.  This is the function that you are looking
> for and it needs to be exposed in a more generally useful and portable way.

This is the function that should be used for apr_create_pipe on NT-based
platforms.  That would have solved this problem cleanly.  I'll try to
create a patch sometime tonight.


View raw message