From d42da230fec8f4d40d610fdae2be859d3cf2be47 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Wed, 22 Jun 2011 04:17:49 -0700 Subject: [PATCH] signals unit test: fix Ensure that the signal waits for us to call sigsuspend, rather than getting delievered to another thread. We do this by using SIGPIPE as our signal of choice. SIGPIPE is blocked in all Ceph threads by default. Signed-off-by: Colin McCabe --- src/test/signals.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/test/signals.cc b/src/test/signals.cc index d0757973a2c44..d68424c1735e1 100644 --- a/src/test/signals.cc +++ b/src/test/signals.cc @@ -18,30 +18,28 @@ static void handle_sigusr1(int signo) TEST(SignalApi, SimpleInstall) { - install_sighandler(SIGUSR1, handle_sigusr1, 0); + install_sighandler(SIGPIPE, handle_sigusr1, 0); } TEST(SignalApi, SimpleInstallAndTest) { - install_sighandler(SIGUSR1, handle_sigusr1, 0); + install_sighandler(SIGPIPE, handle_sigusr1, 0); - // blocked signal should not be delievered until we call sigsuspend() - sigset_t old_sigset; - block_signals(NULL, &old_sigset); - - int ret = kill(getpid(), SIGUSR1); + // SIGPIPE starts out blocked + int ret = kill(getpid(), SIGPIPE); ASSERT_EQ(ret, 0); ASSERT_EQ(got_sigusr1, 0); + // handle SIGPIPE sigset_t mask; sigemptyset(&mask); - sigdelset(&mask, SIGUSR1); ret = sigsuspend(&mask); if (ret == -1) ret = errno; + + // we should have gotten it ASSERT_EQ(ret, EINTR); ASSERT_EQ(got_sigusr1, 1); - unblock_all_signals(&old_sigset); } TEST(SignalEffects, ErrnoTest1) -- 2.39.5