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.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp
index cc95ef7b3..52a097bf3 100644
--- a/tests/signal_test.cpp
+++ b/tests/signal_test.cpp
@@ -597,6 +597,42 @@ TEST(signal, sigqueue) {
ASSERT_EQ(1, g_sigqueue_signal_handler_call_count);
}
+TEST(signal, pthread_sigqueue_self) {
+ ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO);
+ sigval_t sigval;
+ sigval.sival_int = 1;
+ errno = 0;
+ ASSERT_EQ(0, pthread_sigqueue(pthread_self(), SIGALRM, sigval));
+ ASSERT_EQ(0, errno);
+ ASSERT_EQ(1, g_sigqueue_signal_handler_call_count);
+}
+
+TEST(signal, pthread_sigqueue_other) {
+ ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO);
+ sigval_t sigval;
+ sigval.sival_int = 1;
+
+ sigset_t mask;
+ sigfillset(&mask);
+ pthread_sigmask(SIG_SETMASK, &mask, nullptr);
+ pthread_t thread;
+ int rc = pthread_create(&thread, nullptr,
+ [](void*) -> void* {
+ sigset_t mask;
+ sigemptyset(&mask);
+ sigsuspend(&mask);
+ return nullptr;
+ },
+ nullptr);
+ ASSERT_EQ(0, rc);
+
+ errno = 0;
+ ASSERT_EQ(0, pthread_sigqueue(thread, SIGALRM, sigval));
+ ASSERT_EQ(0, errno);
+ pthread_join(thread, nullptr);
+ ASSERT_EQ(1, g_sigqueue_signal_handler_call_count);
+}
+
TEST(signal, sigwaitinfo) {
SignalMaskRestorer smr;