Switch sigpending over to rt_sigpending.
Change-Id: I7b28984796b5fb343cfbcc47e0afc3a84293d417
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp
index 70e9017..a719fe7 100644
--- a/tests/signal_test.cpp
+++ b/tests/signal_test.cpp
@@ -19,6 +19,28 @@
#include <errno.h>
#include <signal.h>
+static size_t SIGNAL_MIN() {
+ return 1; // Signals start at 1 (SIGHUP), not 0.
+}
+
+static size_t SIGNAL_MAX() {
+ size_t result = SIGRTMAX;
+
+#if defined(__BIONIC__) && !defined(__mips__) && !defined(__LP64__)
+ // 32-bit bionic's sigset_t is too small for ARM and x86: 32 bits instead of 64.
+ // This means you can't refer to any of the real-time signals.
+ // See http://b/3038348 and http://b/5828899.
+ result = 32;
+#else
+ // Otherwise, C libraries should be perfectly capable of using their largest signal.
+ if (sizeof(sigset_t) * 8 < static_cast<size_t>(SIGRTMAX)) {
+ abort();
+ }
+#endif
+
+ return result;
+}
+
template <typename Fn>
static void TestSigSet1(Fn fn) {
// NULL sigset_t*.
@@ -45,19 +67,6 @@
sigset_t set;
sigemptyset(&set);
- int min_signal = SIGHUP;
- int max_signal = SIGRTMAX;
-
-#if defined(__BIONIC__) && !defined(__mips__)
- // bionic's sigset_t is too small for ARM and x86: 32 bits instead of 64.
- // This means you can't refer to any of the real-time signals.
- // See http://b/3038348 and http://b/5828899.
- max_signal = 32;
-#else
- // Other C libraries (or bionic for MIPS) are perfectly capable of using their largest signal.
- ASSERT_GE(sizeof(sigset_t) * 8, static_cast<size_t>(SIGRTMAX));
-#endif
-
// Bad signal number: too small.
errno = 0;
ASSERT_EQ(-1, fn(&set, 0));
@@ -65,14 +74,14 @@
// Bad signal number: too high.
errno = 0;
- ASSERT_EQ(-1, fn(&set, max_signal + 1));
+ ASSERT_EQ(-1, fn(&set, SIGNAL_MAX() + 1));
ASSERT_EQ(EINVAL, errno);
// Good signal numbers, low and high ends of range.
errno = 0;
- ASSERT_EQ(0, fn(&set, min_signal));
+ ASSERT_EQ(0, fn(&set, SIGNAL_MIN()));
ASSERT_EQ(0, errno);
- ASSERT_EQ(0, fn(&set, max_signal));
+ ASSERT_EQ(0, fn(&set, SIGNAL_MAX()));
ASSERT_EQ(0, errno);
}
@@ -160,7 +169,7 @@
++gSigSuspendTestHelperCallCount;
}
-TEST(signal, sigsuspend) {
+TEST(signal, sigsuspend_sigpending) {
ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
// Block SIGALRM.
@@ -170,10 +179,25 @@
sigset_t original_set;
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
+ // There should be no pending signals.
+ sigset_t pending;
+ sigemptyset(&pending);
+ ASSERT_EQ(0, sigpending(&pending));
+ for (size_t i = SIGNAL_MIN(); i <= SIGNAL_MAX(); ++i) {
+ EXPECT_FALSE(sigismember(&pending, i)) << i;
+ }
+
// Raise SIGALRM and check our signal handler wasn't called.
raise(SIGALRM);
ASSERT_EQ(0, gSigSuspendTestHelperCallCount);
+ // We should now have a pending SIGALRM but nothing else.
+ sigemptyset(&pending);
+ ASSERT_EQ(0, sigpending(&pending));
+ for (size_t i = SIGNAL_MIN(); i <= SIGNAL_MAX(); ++i) {
+ EXPECT_EQ((i == SIGALRM), sigismember(&pending, i));
+ }
+
// Use sigsuspend to block everything except SIGALRM...
sigset_t not_SIGALRM;
sigfillset(¬_SIGALRM);