properly initialize variables remembering original signal handlers; re-set only if...
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 12 Jan 2015 14:42:33 +0000 (15:42 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 12 Jan 2015 14:42:33 +0000 (15:42 +0100)
src/main.cpp

index 2e2d9e3..34183ad 100644 (file)
@@ -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 ||