From ba0df8152aadda8edca7fbe360565bc14fa534d9 Mon Sep 17 00:00:00 2001 From: Marcin Siodelski Date: Fri, 6 Jun 2014 10:57:24 +0200 Subject: [PATCH] [3405] Properly initialize sigaction data for SignalSet object. Had to use memset to reset sa_action structure. Without that the signal handled wasn't installed correctly because of the random data in the sigaction structure and caused unit tests to fail. --- src/lib/util/signal_set.cc | 4 ++++ src/lib/util/tests/signal_set_unittest.cc | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/util/signal_set.cc b/src/lib/util/signal_set.cc index 5834c409f2..2d8b413551 100644 --- a/src/lib/util/signal_set.cc +++ b/src/lib/util/signal_set.cc @@ -101,7 +101,9 @@ void SignalSet::add(const int sig) { insert(sig); struct sigaction sa; + memset(&sa, 0, sizeof(sa)); sa.sa_handler = internalHandler; + sigfillset(&sa.sa_mask); if (sigaction(sig, &sa, 0) < 0) { erase(sig); isc_throw(SignalSetError, "failed to register a signal handler for" @@ -209,7 +211,9 @@ SignalSet::remove(const int sig) { // Unregister only if we own this signal. if (local_signals_.find(sig) != local_signals_.end()) { struct sigaction sa; + memset(&sa, 0, sizeof(sa)); sa.sa_handler = SIG_DFL; + sigfillset(&sa.sa_mask); if (sigaction(sig, &sa, 0) < 0) { isc_throw(SignalSetError, "unable to restore original signal" " handler for signal: " << sig); diff --git a/src/lib/util/tests/signal_set_unittest.cc b/src/lib/util/tests/signal_set_unittest.cc index 58bc0d8760..89714a8a66 100644 --- a/src/lib/util/tests/signal_set_unittest.cc +++ b/src/lib/util/tests/signal_set_unittest.cc @@ -78,7 +78,7 @@ int SignalSetTest::signum_ = -1; /// Check that the signals are recorded by the signal handlers. TEST_F(SignalSetTest, twoSignals) { // Register handlers for two signals. - signal_set_.reset(new SignalSet(SIGHUP, SIGINT)); + ASSERT_NO_THROW(signal_set_.reset(new SignalSet(SIGHUP, SIGINT))); // Send SIGHUP signal to the process. ASSERT_EQ(0, raise(SIGHUP)); // The SIGHUP should be the next one in the queue to be handled.