chiark / gitweb /
service: enter SERVICE_STOP_SIGTERM state after getting "STOPPING=1"
authorMichal Schmidt <mschmidt@redhat.com>
Thu, 9 Oct 2014 15:27:57 +0000 (17:27 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Thu, 9 Oct 2014 15:48:01 +0000 (17:48 +0200)
SERVICE_STOP would mean we're running the ExecStop command. That's not
the case with "STOPPING=1".
Instead we should enter the same state as if we just told the service
to stop, i.e. SERVICE_STOP_SIGTERM.

This fixes a bug where voluntarily exiting services would hang around in
deactivating state until timeout.

src/core/service.c

index 395e0ca..f551061 100644 (file)
@@ -1227,7 +1227,8 @@ static void service_enter_stop_by_notify(Service *s) {
         if (s->timeout_stop_usec > 0)
                 service_arm_timer(s, s->timeout_stop_usec);
 
-        service_set_state(s, SERVICE_STOP);
+        /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
+        service_set_state(s, SERVICE_STOP_SIGTERM);
 }
 
 static void service_enter_stop(Service *s, ServiceResult f) {