summaryrefslogtreecommitdiffstats
path: root/lldb/unittests/Host/MainLoopTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/unittests/Host/MainLoopTest.cpp')
-rw-r--r--lldb/unittests/Host/MainLoopTest.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/lldb/unittests/Host/MainLoopTest.cpp b/lldb/unittests/Host/MainLoopTest.cpp
index b6aff2fb939..af225de4ab2 100644
--- a/lldb/unittests/Host/MainLoopTest.cpp
+++ b/lldb/unittests/Host/MainLoopTest.cpp
@@ -141,4 +141,28 @@ TEST_F(MainLoopTest, Signal) {
ASSERT_TRUE(loop.Run().Success());
ASSERT_EQ(1u, callback_count);
}
+
+// Test that a signal which is not monitored by the MainLoop does not
+// cause a premature exit.
+TEST_F(MainLoopTest, UnmonitoredSignal) {
+ MainLoop loop;
+ Status error;
+ struct sigaction sa;
+ sa.sa_sigaction = [](int, siginfo_t *, void *) { };
+ sa.sa_flags = SA_SIGINFO; // important: no SA_RESTART
+ sigemptyset(&sa.sa_mask);
+ ASSERT_EQ(0, sigaction(SIGUSR2, &sa, nullptr));
+
+ auto handle = loop.RegisterSignal(SIGUSR1, make_callback(), error);
+ ASSERT_TRUE(error.Success());
+ std::thread killer([]() {
+ sleep(1);
+ kill(getpid(), SIGUSR2);
+ sleep(1);
+ kill(getpid(), SIGUSR1);
+ });
+ ASSERT_TRUE(loop.Run().Success());
+ killer.join();
+ ASSERT_EQ(1u, callback_count);
+}
#endif
OpenPOWER on IntegriCloud