Commit 422838fb authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3406] Implemented support for SIGTERM and SIGINT signals handling.

parent bb78c879
......@@ -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() {
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment