diff --git a/testing/ostest/sigprocmask.c b/testing/ostest/sigprocmask.c index f4c8b8fd17..9e12c90774 100644 --- a/testing/ostest/sigprocmask.c +++ b/testing/ostest/sigprocmask.c @@ -100,13 +100,19 @@ void sigprocmask_test(void) { int signo = g_some_signals[i]; - ret = sigaddset(&newmask, signo); - if (ret != OK) + /* SIGKILL and SIGSTOP should not be added to signal mask */ + + if (signo != SIGKILL && signo != SIGSTOP) { - int errcode = errno; - printf("sigprocmask_test: ERROR sigaddset failed: %d\n", errcode); - ASSERT(false); - goto errout_with_mask; + ret = sigaddset(&newmask, signo); + if (ret != OK) + { + int errcode = errno; + printf("sigprocmask_test: ERROR sigaddset failed: %d\n", + errcode); + ASSERT(false); + goto errout_with_mask; + } } ret = sighold(signo); @@ -195,6 +201,28 @@ void sigprocmask_test(void) goto errout_with_mask; } + /* SIGKILL and SIGSTOP should never be added to signal mask, + * so delete them from newmask before comparing. + */ + + ret = sigdelset(&newmask, SIGKILL); + if (ret != OK) + { + int errcode = errno; + printf("sigprocmask_test: ERROR sigprocmask failed: %d\n", errcode); + ASSERT(false); + goto errout_with_mask; + } + + ret = sigdelset(&newmask, SIGSTOP); + if (ret != OK) + { + int errcode = errno; + printf("sigprocmask_test: ERROR sigprocmask failed: %d\n", errcode); + ASSERT(false); + goto errout_with_mask; + } + /* It should be the same as newmask */ if (memcmp(&currmask, &newmask, sizeof(sigset_t)) != 0)