Fix sigsuspend to use rt_sigsuspend on all platforms.
Change-Id: I981c1a66d35480d4457a0a08a1b042dac94daa5b
This commit is contained in:
@@ -153,3 +153,36 @@ TEST(signal, sigwait) {
|
||||
ASSERT_EQ(0, errno);
|
||||
ASSERT_EQ(SIGALRM, received_signal);
|
||||
}
|
||||
|
||||
static int gSigSuspendTestHelperCallCount = 0;
|
||||
|
||||
static void SigSuspendTestHelper(int) {
|
||||
++gSigSuspendTestHelperCallCount;
|
||||
}
|
||||
|
||||
TEST(signal, sigsuspend) {
|
||||
ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
|
||||
|
||||
// Block SIGALRM.
|
||||
sigset_t just_SIGALRM;
|
||||
sigemptyset(&just_SIGALRM);
|
||||
sigaddset(&just_SIGALRM, SIGALRM);
|
||||
sigset_t original_set;
|
||||
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
|
||||
|
||||
// Raise SIGALRM and check our signal handler wasn't called.
|
||||
raise(SIGALRM);
|
||||
ASSERT_EQ(0, gSigSuspendTestHelperCallCount);
|
||||
|
||||
// Use sigsuspend to block everything except SIGALRM...
|
||||
sigset_t not_SIGALRM;
|
||||
sigfillset(¬_SIGALRM);
|
||||
sigdelset(¬_SIGALRM, SIGALRM);
|
||||
ASSERT_EQ(-1, sigsuspend(¬_SIGALRM));
|
||||
ASSERT_EQ(EINTR, errno);
|
||||
// ...and check that we now receive our pending SIGALRM.
|
||||
ASSERT_EQ(1, gSigSuspendTestHelperCallCount);
|
||||
|
||||
// Restore the original set.
|
||||
assert(0 == sigprocmask(SIG_SETMASK, &original_set, NULL));
|
||||
}
|
||||
|
Reference in New Issue
Block a user