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);
break;
}
}
+
+ for (j = i;
+ sigismember(set, i) > 0 && sigismember(&LwpSigCaught, i) > 0;
+ j--)
+ ;
+ if (!j)
+ LwpSigCheck = 0;
+
sigprocmask(SIG_SETMASK, &save, NULL);
return i;
}
if (LwpSigWaiter)
return EBUSY;
for (;;) {
- LwpSigCheck = 0;
res = lwpGetSig(set);
if (res > 0)
break;