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
5315db952d
commit
7481482656
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