diff options
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r-- | winsup/cygwin/sigproc.cc | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index a38ff0251..015cbaf2b 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -1288,27 +1288,16 @@ wait_sig (VOID *) DWORD nb; sigpacket pack = {}; if (sigq.retry) - { - sigq.retry = false; - pack.si.si_signo = __SIGFLUSH; - } + pack.si.si_signo = __SIGFLUSH; else if (!ReadFile (my_readsig, &pack, sizeof (pack), &nb, NULL)) - Sleep (INFINITE); /* Never exit this thread */ - if (nb != sizeof (pack)) - { - system_printf ("short read from signal pipe: %d != %d", nb, - sizeof (pack)); - continue; - } - - if (!pack.si.si_signo) + Sleep (INFINITE); /* Assume were exiting. Never exit this thread */ + else if (nb != sizeof (pack) || !pack.si.si_signo) { -#ifdef DEBUGGING - system_printf ("zero signal?"); -#endif + system_printf ("garbled signal pipe data nb %u, sig %d", nb, pack.si.si_signo); continue; } + sigq.retry = false; /* Don't process signals when we start exiting */ if (exit_state > ES_EXIT_STARTING && pack.si.si_signo > 0) continue; |