Handle different termination signals differently (fix bug).
authorDavin McCall <davmac@davmac.org>
Thu, 8 Jun 2017 08:09:50 +0000 (09:09 +0100)
committerDavin McCall <davmac@davmac.org>
Thu, 8 Jun 2017 08:09:50 +0000 (09:09 +0100)
src/dinit.cc

index 0ae09ae391d538c7b42a696ccf2a379ec7727cd3..57756996526b18fa19881e8821a1b005969deb7a 100644 (file)
@@ -42,9 +42,9 @@ using EventLoop_t = event_loop<null_mutex>;
 
 EventLoop_t eventLoop = EventLoop_t();
 
-static void sigint_reboot_cb(EventLoop_t *eloop) noexcept;
-static void sigquit_cb(EventLoop_t *eloop) noexcept;
-static void sigterm_cb(EventLoop_t *eloop) noexcept;
+static void sigint_reboot_cb(EventLoop_t &eloop) noexcept;
+static void sigquit_cb(EventLoop_t &eloop) noexcept;
+static void sigterm_cb(EventLoop_t &eloop) noexcept;
 static void close_control_socket() noexcept;
 
 static void control_socket_cb(EventLoop_t *loop, int fd);
@@ -107,7 +107,7 @@ namespace {
     class CallbackSignalHandler : public EventLoop_t::signal_watcher_impl<CallbackSignalHandler>
     {
         public:
-        typedef void (*cb_func_t)(EventLoop_t *);
+        typedef void (*cb_func_t)(EventLoop_t &);
         
         private:
         cb_func_t cb_func;
@@ -123,7 +123,7 @@ namespace {
         
         rearm received(EventLoop_t &eloop, int signo, siginfo_p siginfo)
         {
-            service_set->stop_all_services(ShutdownType::REBOOT);
+            cb_func(eloop);
             return rearm::REARM;
         }
     };
@@ -550,13 +550,13 @@ void setup_external_log() noexcept
 }
 
 /* handle SIGINT signal (generated by kernel when ctrl+alt+del pressed) */
-static void sigint_reboot_cb(EventLoop_t *eloop) noexcept
+static void sigint_reboot_cb(EventLoop_t &eloop) noexcept
 {
     service_set->stop_all_services(ShutdownType::REBOOT);
 }
 
 /* handle SIGQUIT (if we are system init) */
-static void sigquit_cb(EventLoop_t *eloop) noexcept
+static void sigquit_cb(EventLoop_t &eloop) noexcept
 {
     // This performs an immediate shutdown, without service rollback.
     close_control_socket();
@@ -565,7 +565,7 @@ static void sigquit_cb(EventLoop_t *eloop) noexcept
 }
 
 /* handle SIGTERM/SIGQUIT(non-system-daemon) - stop all services and shut down */
-static void sigterm_cb(EventLoop_t *eloop) noexcept
+static void sigterm_cb(EventLoop_t &eloop) noexcept
 {
     service_set->stop_all_services();
 }