// data required for signal handling (SIGINT, SIGTERM, ... )
struct signal_data_struct
{
- bool signaled_flag_int;
- bool signaled_flag_term;
- bool signaled_flag_usr1;
- bool signaled_flag_usr2;
+ volatile sig_atomic_t signaled_flag_int;
+ volatile sig_atomic_t signaled_flag_term;
+ volatile sig_atomic_t signaled_flag_usr1;
+ volatile sig_atomic_t signaled_flag_usr2;
IoServiceItem io_service;
void (*old_handler_int )(int);
void (*old_handler_term)(int);
int config_log_level;
signal_data_struct():
- signaled_flag_int( false ),
- signaled_flag_term( false ),
- signaled_flag_usr1( false ),
- signaled_flag_usr2( false ),
+ signaled_flag_int( 0 ),
+ signaled_flag_term( 0 ),
+ signaled_flag_usr1( 0 ),
+ signaled_flag_usr2( 0 ),
io_service(),
old_handler_int( 0 ),
old_handler_term( 0 ),
/// registered as signal handler; just sets signal_data.signaled_flag
void signal_handler_int(int param)
{
- signal_data.signaled_flag_int = true;
+ signal_data.signaled_flag_int = 1;
}
void signal_handler_term(int param)
{
- signal_data.signaled_flag_term = true;
+ signal_data.signaled_flag_term = 1;
}
void signal_handler_usr1(int param)
{
- signal_data.signaled_flag_usr1 = true;
+ signal_data.signaled_flag_usr1 = 1;
}
void signal_handler_usr2(int param)
{
- signal_data.signaled_flag_usr2 = true;
+ signal_data.signaled_flag_usr2 = 1;
}
else {
if ( signal_data.signaled_flag_int )
{
- signal_data.signaled_flag_int = false;
+ signal_data.signaled_flag_int = 0;
GlobalLogger.notice() << "Received signal SIGINT --> will stop" << endl;
want_stop = true;
}
else if ( signal_data.signaled_flag_term )
{
- signal_data.signaled_flag_term = false;
+ signal_data.signaled_flag_term = 0;
GlobalLogger.notice() << "Received signal SIGTERM --> will stop" << endl;
want_stop = true;
}
else if ( signal_data.signaled_flag_usr1 )
{
- signal_data.signaled_flag_usr1 = false;
+ signal_data.signaled_flag_usr1 = 0;
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 "
}
else if ( signal_data.signaled_flag_usr2 )
{
- signal_data.signaled_flag_usr2 = false;
+ signal_data.signaled_flag_usr2 = 0;
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() << ")";
/// 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_int = false;
- signal_data.signaled_flag_term = false;
- signal_data.signaled_flag_usr1 = false;
- signal_data.signaled_flag_usr2 = false;
+ signal_data.signaled_flag_int = 0;
+ signal_data.signaled_flag_term = 0;
+ signal_data.signaled_flag_usr1 = 0;
+ signal_data.signaled_flag_usr2 = 0;
signal_data.config_log_level = config_log_level;
// install own signal handlers