From 716deecbea14ffb09e216fb7957cd3839c7e60a0 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Thu, 22 Jan 2015 15:27:57 +0100 Subject: [PATCH] amendment to last commit: only makes sense if use different flags per signal type --- src/main.cpp | 60 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ad5b6cf..ce92e0a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,7 +82,10 @@ void reset_signal_handlers(); // data required for signal handling (SIGINT, SIGTERM, ... ) struct signal_data_struct { - sig_atomic_t signaled_flag; + bool signaled_flag_int; + bool signaled_flag_term; + bool signaled_flag_usr1; + bool signaled_flag_usr2; IoServiceItem io_service; void (*old_handler_int )(int); void (*old_handler_term)(int); @@ -93,7 +96,10 @@ struct signal_data_struct int config_log_level; signal_data_struct(): - signaled_flag( false ), + signaled_flag_int( false ), + signaled_flag_term( false ), + signaled_flag_usr1( false ), + signaled_flag_usr2( false ), io_service(), old_handler_int( 0 ), old_handler_term( 0 ), @@ -310,19 +316,19 @@ signal_data_struct signal_data; /// registered as signal handler; just sets signal_data.signaled_flag void signal_handler_int(int param) { - signal_data.signaled_flag = param; // SIGINT + signal_data.signaled_flag_int = true; } void signal_handler_term(int param) { - signal_data.signaled_flag = param; // SIGTERM + signal_data.signaled_flag_term = true; } void signal_handler_usr1(int param) { - signal_data.signaled_flag = param; // SIGUSR1 + signal_data.signaled_flag_usr1 = true; } void signal_handler_usr2(int param) { - signal_data.signaled_flag = param; // SIGUSR2 + signal_data.signaled_flag_usr2 = true; } @@ -345,37 +351,34 @@ void signal_checker( const boost::system::error_code &error ) want_stop = true; } } - else if ( signal_data.signaled_flag ) - { // so there has been a signal --> check which one it was - - // quickly copy and reset signal flag - sig_atomic_t signaled_flag = signal_data.signaled_flag; - signal_data.signaled_flag = 0; - - if ( signaled_flag == SIGUSR1 ) + else { + if ( signal_data.signaled_flag_int ) + { + signal_data.signaled_flag_int = false; + GlobalLogger.notice() << "Received signal SIGINT --> will stop" << endl; + want_stop = true; + } + else if ( signal_data.signaled_flag_term ) + { + signal_data.signaled_flag_term = false; + GlobalLogger.notice() << "Received signal SIGTERM --> will stop" << endl; + want_stop = true; + } + else if ( signal_data.signaled_flag_usr1 ) { + signal_data.signaled_flag_usr1 = false; int new_log_level = I2n::Logger::get_log_level()+1; I2n::Logger::set_log_level( new_log_level ); GlobalLogger.info() << "Received SIGUSR1 -- increased log level to " << I2n::Logger::get_log_level_string(); } - else if ( signaled_flag == SIGUSR2 ) + else if ( signal_data.signaled_flag_usr2 ) { + signal_data.signaled_flag_usr2 = false; I2n::Logger::set_log_level( signal_data.config_log_level ); GlobalLogger.info() << "Received SIGUSR2 -- reset log level to normal (" << I2n::Logger::get_log_level_string() << ")"; } - else if ( ( signaled_flag == SIGTERM ) || ( signaled_flag == SIGINT )) - { - GlobalLogger.notice() << "Received signal SIGINT/SIGTERM --> will stop" << endl; - want_stop = true; - } - else - { - GlobalLogger.warning() << "Do not know how to deal with unexpected signal " - << signaled_flag << " --> will stop" << endl; - want_stop = true; - } } if ( want_stop ) @@ -394,7 +397,10 @@ void signal_checker( const boost::system::error_code &error ) /// register own signal handlers; see reset_signal_handlers for undo void install_signal_handlers( const IoServiceItem io_service, const int config_log_level ) { - signal_data.signaled_flag = 0; + signal_data.signaled_flag_int = false; + signal_data.signaled_flag_term = false; + signal_data.signaled_flag_usr1 = false; + signal_data.signaled_flag_usr2 = false; signal_data.config_log_level = config_log_level; // install own signal handlers -- 1.7.1