From: sos AT prospect DOT com DOT ru (Sergey Okhapkin) Subject: RE: Sergey's latest cygwin.dll and pdksh 16 Jun 1997 23:48:30 -0700 Sender: mail AT cygnus DOT com Approved: cygnus DOT gnu-win32 AT cygnus DOT com Distribution: cygnus Message-ID: <01BC7B05.DA103740.cygnus.gnu-win32@gater.krystalbank.msk.ru> Original-To: "gnu-win32 AT cygnus DOT com" , "'cgf AT bbc DOT com'" Original-Cc: "'Geoffrey Noer'" Encoding: 36 TEXT Original-Sender: owner-gnu-win32 AT cygnus DOT com Chris Faylor wrote: > > #ifdef POSIX_SIGNALS > struct sigaction act; > > act.sa_handler = (SIGNAL_HANDTYPE) handler; > sigemptyset(&act.sa_mask); /* only block sig while in handler */ > act.sa_flags = 0; > # ifdef SA_INTERRUPT /* SunOS 4.x */ > if (interact) > act.sa_flags |= SA_INTERRUPT; /* make sure system calls are not restarte > d */ > # endif > sigaction(sig, &act, (struct sigaction *)NULL); > > ---- > > Where the 'sig' is 'SIGCHLD'. > > It appears that 'sig' is blocked while within the handler. Could that be > what is going wrong? Cygwin.dll blocks the signal while executing signal's handler. If arrived signal is blocked, it will be added to process's sig_pending mask. On exit from any handler all pending signals are raised again. See exceptions.cc for details. Probably, we have to change sig_pending from a bit mask to an array of counters to avoid possible losts of a signals. What do you think about? -- Sergey Okhapkin, http://www.lexa.ru/sos Moscow, Russia Looking for a job. - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".