On Wed, 11 Dec 2002 [EMAIL PROTECTED] 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. Ryan
