summaryrefslogtreecommitdiff
path: root/tests/signal_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/signal_test.cpp')
-rw-r--r--tests/signal_test.cpp99
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) {