From: Marcin Siodelski Date: Fri, 23 May 2014 15:07:03 +0000 (+0200) Subject: [3406] Implemented support for SIGTERM and SIGINT signals handling. X-Git-Tag: trac3434_base~17^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=422838fb0696adeebdab053a54622d609f45aec3;p=thirdparty%2Fkea.git [3406] Implemented support for SIGTERM and SIGINT signals handling. --- diff --git a/src/bin/dhcp6/kea_controller.cc b/src/bin/dhcp6/kea_controller.cc index b43422b619..135033bb35 100644 --- a/src/bin/dhcp6/kea_controller.cc +++ b/src/bin/dhcp6/kea_controller.cc @@ -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() { diff --git a/src/bin/dhcp6/tests/dhcp6_test_func.sh b/src/bin/dhcp6/tests/dhcp6_test_func.sh index fa519de0c3..e785fbb470 100755 --- a/src/bin/dhcp6/tests/dhcp6_test_func.sh +++ b/src/bin/dhcp6/tests/dhcp6_test_func.sh @@ -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