From 620d0784290f5d27c7f05b9781173a528c280e77 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Mon, 20 Jun 2011 15:41:41 -0700 Subject: [PATCH] signal: const cleanup, don't use derr In signal.cc: const cleanup, don't use derr, add a comment. Signed-off-by: Colin McCabe --- src/common/Thread.h | 4 ++-- src/common/common_init.cc | 2 +- src/common/signal.cc | 33 ++++++++------------------------- src/common/signal.h | 2 +- src/test/signals.cc | 2 +- 5 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/common/Thread.h b/src/common/Thread.h index 7bd51b1b7897f..2262568700750 100644 --- a/src/common/Thread.h +++ b/src/common/Thread.h @@ -70,11 +70,11 @@ class Thread { // another thread or delieverd to this thread later.) sigset_t old_sigset; if (g_code_env == CODE_ENVIRONMENT_LIBRARY) { - block_signals(&old_sigset, NULL); + block_signals(NULL, &old_sigset); } else { int to_block[] = { SIGPIPE , 0 }; - block_signals(&old_sigset, to_block); + block_signals(to_block, &old_sigset); } r = pthread_create(&thread_id, thread_attr, _entry_func, (void*)this); restore_sigset(&old_sigset); diff --git a/src/common/common_init.cc b/src/common/common_init.cc index ad52a5c976011..ff88c0c035f21 100644 --- a/src/common/common_init.cc +++ b/src/common/common_init.cc @@ -130,7 +130,7 @@ void common_init(std::vector < const char* >& args, // signal stuff int siglist[] = { SIGPIPE, 0 }; - block_signals(NULL, siglist); + block_signals(siglist, NULL); install_standard_sighandlers(); if (code_env == CODE_ENVIRONMENT_DAEMON) { diff --git a/src/common/signal.cc b/src/common/signal.cc index 6bc15ed569839..bac8a18946259 100644 --- a/src/common/signal.cc +++ b/src/common/signal.cc @@ -143,7 +143,8 @@ void install_standard_sighandlers(void) install_sighandler(SIGINT, handle_shutdown_signal, SA_RESETHAND | SA_NODEFER); } -void block_signals(sigset_t *old_sigset, int *siglist) +/* Block the signals in 'siglist'. If siglist == NULL, block all signals. */ +void block_signals(const int *siglist, sigset_t *old_sigset) { sigset_t sigset; if (!siglist) { @@ -157,26 +158,14 @@ void block_signals(sigset_t *old_sigset, int *siglist) ++i; } } - sigdelset(&sigset, SIGKILL); - if (pthread_sigmask(SIG_BLOCK, &sigset, old_sigset)) { - derr << "block_all_signals: sigprocmask failed" << dendl; - if (old_sigset) - sigaddset(old_sigset, SIGKILL); - return; - } - if (old_sigset) - sigdelset(old_sigset, SIGKILL); + int ret = pthread_sigmask(SIG_BLOCK, &sigset, old_sigset); + assert(ret == 0); } void restore_sigset(const sigset_t *old_sigset) { - if (sigismember(old_sigset, SIGKILL) != 0) { - derr << "restore_sigset: not restoring invalid old_sigset" << dendl; - return; - } - if (pthread_sigmask(SIG_SETMASK, old_sigset, NULL)) { - derr << "restore_sigset: sigprocmask failed" << dendl; - } + int ret = pthread_sigmask(SIG_SETMASK, old_sigset, NULL); + assert(ret == 0); } void unblock_all_signals(sigset_t *old_sigset) @@ -184,12 +173,6 @@ void unblock_all_signals(sigset_t *old_sigset) sigset_t sigset; sigfillset(&sigset); sigdelset(&sigset, SIGKILL); - if (pthread_sigmask(SIG_UNBLOCK, &sigset, old_sigset)) { - derr << "unblock_all_signals: sigprocmask failed" << dendl; - if (old_sigset) - sigaddset(old_sigset, SIGKILL); - return; - } - if (old_sigset) - sigdelset(old_sigset, SIGKILL); + int ret = pthread_sigmask(SIG_UNBLOCK, &sigset, old_sigset); + assert(ret == 0); } diff --git a/src/common/signal.h b/src/common/signal.h index ed9ef2891dcf9..cac3c7bb6569e 100644 --- a/src/common/signal.h +++ b/src/common/signal.h @@ -38,7 +38,7 @@ std::string signal_mask_to_str(); // On success, stores the old set of blocked signals in // old_sigset. On failure, stores an invalid set of blocked signals in // old_sigset. -void block_signals(sigset_t *old_sigset, int *siglist); +void block_signals(const int *siglist, sigset_t *old_sigset); // Restore the set of blocked signals. Will not restore an invalid set of // blocked signals. diff --git a/src/test/signals.cc b/src/test/signals.cc index 468b27096aae2..344cc59a78772 100644 --- a/src/test/signals.cc +++ b/src/test/signals.cc @@ -26,7 +26,7 @@ TEST(SignalApi, SimpleInstallAndTest) // blocked signal should not be delievered until we call sigsuspend() sigset_t old_sigset; - block_signals(&old_sigset, NULL); + block_signals(NULL, &old_sigset); int ret = kill(getpid(), SIGUSR1); ASSERT_EQ(ret, 0); -- 2.39.5