lwp: Fix handling of sigismember() failure
sigismember() fails when passed an invalid or unsupported signal number. lwpInitSigWait() and lwpGetSig() treat sigismember() failure like "is a member". lwpInitSigWait() will then sigaction() unsuccessfully. Harmless. lwpGetSig() returns the bad signal number when it's greater than any caught signal's number. The bad signal number then gets returned to main(), which shuts down the server. Fix by treating failure like "is not a member". Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
f15bb68b63
commit
aae823507c
1 changed files with 2 additions and 2 deletions
|
@ -69,7 +69,7 @@ lwpInitSigWait(sigset_t *set)
|
||||||
act.sa_mask = *set;
|
act.sa_mask = *set;
|
||||||
act.sa_handler = lwpCatchAwaitedSig;
|
act.sa_handler = lwpCatchAwaitedSig;
|
||||||
for (i = 0; i < NSIG; i++) {
|
for (i = 0; i < NSIG; i++) {
|
||||||
if (sigismember(set, i))
|
if (sigismember(set, i) > 0)
|
||||||
sigaction(i, &act, NULL);
|
sigaction(i, &act, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ lwpGetSig(sigset_t *set)
|
||||||
|
|
||||||
sigprocmask(SIG_BLOCK, set, &save);
|
sigprocmask(SIG_BLOCK, set, &save);
|
||||||
for (i = NSIG - 1; i > 0; i--) {
|
for (i = NSIG - 1; i > 0; i--) {
|
||||||
if (sigismember(set, i) && sigismember(&LwpSigCaught, i)) {
|
if (sigismember(set, i) > 0 && sigismember(&LwpSigCaught, i) > 0) {
|
||||||
lwpStatus(LwpCurrent, "Got awaited signal %d", i);
|
lwpStatus(LwpCurrent, "Got awaited signal %d", i);
|
||||||
sigdelset(&LwpSigCaught, i);
|
sigdelset(&LwpSigCaught, i);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue