]> git.pond.sub.org Git - empserver/blobdiff - src/lib/lwp/sig.c
lwp: Fix signal wait screwup for multiple different signals
[empserver] / src / lib / lwp / sig.c
index 04fb9f97741dba4d645c893673d3a8aa4e029afe..62d19728af5cbfadfdc7733c3a4bfd3d817e2e12 100644 (file)
@@ -91,9 +91,10 @@ static int
 lwpGetSig(sigset_t *set)
 {
     sigset_t save;
-    int i;
+    int i, j;
 
     sigprocmask(SIG_BLOCK, set, &save);
+
     for (i = NSIG - 1; i > 0; i--) {
        if (sigismember(set, i) > 0 && sigismember(&LwpSigCaught, i) > 0) {
            lwpStatus(LwpCurrent, "Got awaited signal %d", i);
@@ -101,6 +102,14 @@ lwpGetSig(sigset_t *set)
            break;
        }
     }
+
+    for (j = i;
+        sigismember(set, i) > 0 && sigismember(&LwpSigCaught, i) > 0;
+        j--)
+       ;
+    if (!j)
+       LwpSigCheck = 0;
+
     sigprocmask(SIG_SETMASK, &save, NULL);
     return i;
 }
@@ -119,7 +128,6 @@ lwpSigWait(sigset_t *set, int *sig)
     if (LwpSigWaiter)
        return EBUSY;
     for (;;) {
-       LwpSigCheck = 0;
        res = lwpGetSig(set);
        if (res > 0)
            break;