// 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