This is the mail archive of the
cygwin-developers@cygwin.com
mailing list for the Cygwin project.
Re: possible explanation for make hang
- To: <cygwin-developers at cygwin dot com>
- Subject: Re: possible explanation for make hang
- From: "Robert Collins" <robert dot collins at itdomain dot com dot au>
- Date: Sun, 16 Sep 2001 15:09:29 +1000
- References: <20010915234433.A30407@redhat.com>
----- Original Message -----
From: "Christopher Faylor" <cgf@redhat.com>
To: <cygwin-developers@cygwin.com>
Sent: Sunday, September 16, 2001 1:44 PM
Subject: possible explanation for make hang
> I don't know precisely what make is doing but it is possible that
> if more than one program is attempting to read from the same pipe
> there will be a race that will cause cygwin to block in an
uninterruptible
> read. So, if something like a SIGCHLD comes in while cygwin is
reading
> a pipe it won't be possible to deal with it. I'm not aware of any
> way to interrupt a blocking read on a pipe so cygwin will hang until
> something shows up on the pipe.
Can we wait on the pipe and a signal event?
Ie
==
HANDLE handles[2];
handles[0] = signalevent;
handles[1] = pipe;
dword rc = WaitForMultipleObjects (2, handles, FALSE, INFINITE);
if ((rc - WAIT_OBJECT_0) == 1)
ReadFile (pipe);
else
handle_signal;
/* the pipe may also have data, but can check again once the signal is
handled*/
==
> I just had this happen to me after 57 iterations of make in the winsup
> directory. The stack traces of the affected makes seemed to indicate
> that this is what is happening.
>
> I *really* wish I knew of another way to deal with interrupting reads
> than the kludge that is now in use but I don't.
>
> I thought I had a promising lead a few weeks ago but the Windows API
> stood staunchly in my path, as usual.
What was that? Perhaps a brain storm could find something?
Rob