diff options
Diffstat (limited to 'tests/signal_test.cpp')
-rw-r--r-- | tests/signal_test.cpp | 99 |
1 files changed, 46 insertions, 53 deletions
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp index 3c660346d..ffbb667e0 100644 --- a/tests/signal_test.cpp +++ b/tests/signal_test.cpp @@ -154,44 +154,6 @@ TEST(signal, raise_in_signal_handler) { raise(SIGALRM); } -TEST(signal, sigwait_SIGALRM) { - ScopedSignalHandler ssh(SIGALRM, [](int sig) { ASSERT_EQ(SIGALRM, sig); }); - - sigset_t wait_set; - sigemptyset(&wait_set); - sigaddset(&wait_set, SIGALRM); - - alarm(1); - - int received_signal; - errno = 0; - ASSERT_EQ(0, sigwait(&wait_set, &received_signal)); - ASSERT_EQ(0, errno); - ASSERT_EQ(SIGALRM, received_signal); -} - -TEST(signal, sigwait64_SIGRTMIN) { - ScopedSignalHandler ssh(SIGRTMIN, [](int sig) { ASSERT_EQ(SIGRTMIN, sig); }); - - sigset64_t wait_set; - sigemptyset64(&wait_set); - sigaddset64(&wait_set, SIGRTMIN); - - pid_t tid = gettid(); - std::thread thread([&tid]() { - sleep(1); - tgkill(getpid(), tid, SIGRTMIN); - }); - - int received_signal; - errno = 0; - ASSERT_EQ(0, sigwait64(&wait_set, &received_signal)); - ASSERT_EQ(0, errno); - ASSERT_EQ(SIGRTMIN, received_signal); - - thread.join(); -} - static int g_sigsuspend_signal_handler_call_count = 0; TEST(signal, sigsuspend_sigpending) { @@ -620,8 +582,7 @@ static void SigqueueSignalHandler(int signum, siginfo_t* info, void*) { TEST(signal, sigqueue) { ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO); - sigval_t sigval; - sigval.sival_int = 1; + sigval_t sigval = {.sival_int = 1}; errno = 0; ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval)); ASSERT_EQ(0, errno); @@ -630,8 +591,7 @@ TEST(signal, sigqueue) { TEST(signal, pthread_sigqueue_self) { ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO); - sigval_t sigval; - sigval.sival_int = 1; + sigval_t sigval = {.sival_int = 1}; errno = 0; ASSERT_EQ(0, pthread_sigqueue(pthread_self(), SIGALRM, sigval)); ASSERT_EQ(0, errno); @@ -640,8 +600,7 @@ TEST(signal, pthread_sigqueue_self) { TEST(signal, pthread_sigqueue_other) { ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO); - sigval_t sigval; - sigval.sival_int = 1; + sigval_t sigval = {.sival_int = 1}; sigset_t mask; sigfillset(&mask); @@ -664,6 +623,44 @@ TEST(signal, pthread_sigqueue_other) { ASSERT_EQ(1, g_sigqueue_signal_handler_call_count); } +TEST(signal, sigwait_SIGALRM) { + SignalMaskRestorer smr; + + // Block SIGALRM. + sigset_t just_SIGALRM; + sigemptyset(&just_SIGALRM); + sigaddset(&just_SIGALRM, SIGALRM); + ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, nullptr)); + + // Raise SIGALRM. + sigval_t sigval = {.sival_int = 1}; + ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval)); + + // Get pending SIGALRM. + int sig; + ASSERT_EQ(0, sigwait(&just_SIGALRM, &sig)); + ASSERT_EQ(SIGALRM, sig); +} + +TEST(signal, sigwait64_SIGRTMIN) { + SignalMaskRestorer smr; + + // Block SIGRTMIN. + sigset64_t just_SIGRTMIN; + sigemptyset64(&just_SIGRTMIN); + sigaddset64(&just_SIGRTMIN, SIGRTMIN); + ASSERT_EQ(0, sigprocmask64(SIG_BLOCK, &just_SIGRTMIN, nullptr)); + + // Raise SIGRTMIN. + sigval_t sigval = {.sival_int = 1}; + ASSERT_EQ(0, sigqueue(getpid(), SIGRTMIN, sigval)); + + // Get pending SIGRTMIN. + int sig; + ASSERT_EQ(0, sigwait64(&just_SIGRTMIN, &sig)); + ASSERT_EQ(SIGRTMIN, sig); +} + TEST(signal, sigwaitinfo) { SignalMaskRestorer smr; @@ -674,8 +671,7 @@ TEST(signal, sigwaitinfo) { ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, nullptr)); // Raise SIGALRM. - sigval_t sigval; - sigval.sival_int = 1; + sigval_t sigval = {.sival_int = 1}; ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval)); // Get pending SIGALRM. @@ -697,8 +693,7 @@ TEST(signal, sigwaitinfo64_SIGRTMIN) { ASSERT_EQ(0, sigprocmask64(SIG_BLOCK, &just_SIGRTMIN, nullptr)); // Raise SIGRTMIN. - sigval_t sigval; - sigval.sival_int = 1; + sigval_t sigval = {.sival_int = 1}; ASSERT_EQ(0, sigqueue(getpid(), SIGRTMIN, sigval)); // Get pending SIGRTMIN. @@ -808,15 +803,13 @@ TEST(signal, rt_tgsigqueueinfo) { #endif TEST(signal, sigset_size) { - // The setjmp implementations for ARM, AArch64, x86, and x86_64 assume that sigset_t can fit in a - // long. This is true because ARM and x86 have broken rt signal support, and AArch64 and x86_64 - // both have a SIGRTMAX defined as 64. -#if defined(__arm__) || defined(__aarch64__) || defined(__i386__) || defined(__x86_64__) + // The setjmp implementations assume that sigset_t can fit in a + // long. This is true because ARM and x86 have broken rt signal support, + // and AArch64 and x86_64 both have a SIGRTMAX defined as 64. #if defined(__BIONIC__) static_assert(sizeof(sigset_t) <= sizeof(long), "sigset_t doesn't fit in a long"); #endif static_assert(sizeof(sigset64_t)*8 >= 64, "sigset64_t too small for real-time signals"); -#endif } TEST(signal, sigignore_EINVAL) { |