From: Christian Herdtweck Date: Mon, 12 Jan 2015 14:42:33 +0000 (+0100) Subject: properly initialize variables remembering original signal handlers; re-set only if... X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=425d0f0732f63b3ef081ec37cbdce8d40148e770;p=pingcheck properly initialize variables remembering original signal handlers; re-set only if were set --- diff --git a/src/main.cpp b/src/main.cpp index 2e2d9e3..34183ad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -91,6 +91,10 @@ struct signal_data_struct signal_data_struct(): signaled_flag( false ), io_service(), + old_handler_int( 0 ), + old_handler_term( 0 ), + old_handler_usr1( 0 ), + old_handler_usr2( 0 ), stopped( false ), check_timer(), config_log_level( I2n::Logger::LogLevel::Notice ) @@ -412,14 +416,18 @@ void install_signal_handler( const IoServiceItem io_service, const int config_lo /// reset handlers to the ones saved in install_signal_handler void reset_signal_handlers() { - void (*old_handler_int)(int); - void (*old_handler_term)(int); - void (*old_handler_usr1)(int); - void (*old_handler_usr2)(int); - old_handler_int = signal(SIGINT , signal_data.old_handler_int); - old_handler_term = signal(SIGTERM, signal_data.old_handler_term); - old_handler_usr1 = signal(SIGUSR1, signal_data.old_handler_usr1); - old_handler_usr2 = signal(SIGUSR2, signal_data.old_handler_usr2); + void (*old_handler_int)(int) = 0; + void (*old_handler_term)(int) = 0; + void (*old_handler_usr1)(int) = 0; + void (*old_handler_usr2)(int) = 0; + if (signal_data.old_handler_int != 0 ) + old_handler_int = signal(SIGINT , signal_data.old_handler_int); + if (signal_data.old_handler_term != 0 ) + old_handler_term = signal(SIGTERM, signal_data.old_handler_term); + if (signal_data.old_handler_usr1 != 0 ) + old_handler_usr1 = signal(SIGUSR1, signal_data.old_handler_usr1); + if (signal_data.old_handler_usr2 != 0 ) + old_handler_usr2 = signal(SIGUSR2, signal_data.old_handler_usr2); if ( old_handler_int == SIG_ERR || old_handler_term == SIG_ERR ||