chiark / gitweb /
systemctl: make sure daemon-reexec and friends return a correct error code
[elogind.git] / src / service.c
index 071f015b1383cc47e7470922c368cfc7aa6d5439..fabb71ca978f23453aac4c4bec7cad1db28a7643 100644 (file)
@@ -1620,7 +1620,7 @@ static void service_enter_signal(Service *s, ServiceState state, bool success) {
                         if ((r = cgroup_bonding_kill_list(s->meta.cgroup_bondings, sig, pid_set)) < 0) {
                                 if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
                                         log_warning("Failed to kill control group: %s", strerror(-r));
-                        } else
+                        } else if (r > 0)
                                 wait_for_exit = true;
 
                         set_free(pid_set);
@@ -1841,7 +1841,7 @@ static void service_enter_restart(Service *s) {
 
         service_enter_dead(s, true, false);
 
-        if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s), JOB_FAIL, false, NULL, NULL)) < 0)
+        if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s), JOB_FAIL, false, &error, NULL)) < 0)
                 goto fail;
 
         log_debug("%s scheduled restart job.", s->meta.id);
@@ -2572,6 +2572,13 @@ static void service_cgroup_notify_event(Unit *u) {
                 service_enter_running(s, true);
                 break;
 
+        case SERVICE_STOP_SIGTERM:
+        case SERVICE_STOP_SIGKILL:
+                if (main_pid_good(s) <= 0 && !control_pid_good(s))
+                        service_enter_stop_post(s, true);
+
+                break;
+
         default:
                 ;
         }