]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3406] Implemented support for SIGTERM and SIGINT signals handling.
authorMarcin Siodelski <marcin@isc.org>
Fri, 23 May 2014 15:07:03 +0000 (17:07 +0200)
committerMarcin Siodelski <marcin@isc.org>
Fri, 23 May 2014 15:07:03 +0000 (17:07 +0200)
src/bin/dhcp6/kea_controller.cc
src/bin/dhcp6/tests/dhcp6_test_func.sh

index b43422b61966ddbf7d1aa21748b5bbe28701c4d7..135033bb3516169e394ee9fda574f80542f96743 100644 (file)
@@ -128,8 +128,11 @@ void configure(const std::string& file_name) {
 
 /// @brief Signals handler for DHCPv6 server.
 ///
-/// Currently, this function handles SIGHUP signal only. When this signal
-/// is received it triggeres DHCSP server reconfiguration.
+/// This signal handler handles the following signals received by the DHCPv6
+/// server process:
+/// - SIGHUP - triggers server's dynamic reconfiguration.
+/// - SIGTERM - triggers server's shut down.
+/// - SIGINT - triggers server's shut down.
 ///
 /// @param signo Signal number received.
 void signalHandler(int signo) {
@@ -144,6 +147,9 @@ void signalHandler(int signo) {
             // the server keeps working.
             LOG_ERROR(dhcp6_logger, DHCP6_DYNAMIC_RECONFIGURATION_FAIL);
         }
+    } else if ((signo == SIGTERM) || (signo == SIGINT)) {
+        ElementPtr params(new isc::data::MapElement());
+        ControlledDhcpv6Srv::processCommand("shutdown", params);
     }
 }
 
@@ -164,9 +170,12 @@ ControlledDhcpv6Srv::init(const std::string& file_name) {
     // methods are called in processConfig() which is called by
     // processCommand("reload-config", ...)
 
-    // Set signal handler function for SIGHUP. When the SIGHUP is received
-    // by the process the server reconfiguration will be triggered.
+    // Set signal handlers. When the SIGHUP is received by the process
+    // the server reconfiguration will be triggered. When SIGTERM or
+    // SIGINT will be received, the server will start shutting down.
     signal(SIGHUP, signalHandler);
+    signal(SIGTERM, signalHandler);
+    signal(SIGINT, signalHandler);
 }
 
 void ControlledDhcpv6Srv::cleanup() {
index fa519de0c3945c4c4a50a57b5751420ce633573d..e785fbb47034014c1abc23db3048f6c59fa8ef55 100755 (executable)
@@ -153,6 +153,7 @@ wait_for_message() {
     _WAIT_FOR_MESSAGE=0
     # Check if log file exists and if we reached timeout.
     while [ ! -s {LOG_FILE} ] && [ ${loops} -le ${timeout} ]; do
+        printf "."
         # Check if the message has been logged.
         get_log_messages ${message}
         if [ ${_GET_LOG_MESSAGES} -eq ${occurrences} ]; then
@@ -161,7 +162,6 @@ wait_for_message() {
             return
         fi
         # Message not recorded. Keep going.
-        printf "."
         sleep 1
         loops=`expr ${loops} + 1`
     done