summaryrefslogtreecommitdiff
path: root/src/service.c
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2011-12-03 21:34:34 +0100
committerMichal Schmidt <mschmidt@redhat.com>2011-12-03 23:10:12 +0100
commit2096e009a790073a934f5cd07d17024d3b199d0b (patch)
tree8a8ed615a78ceb79b4c22cff9495203a1146bb42 /src/service.c
parent3a11183858af30bc9b4e9dac430dd7541deec19b (diff)
service: stop the service if ExecStartPost ends with a failure
The handling of failures in ExecStartPost is inconsistent. If the command times out, the service is stopped. But if the command exits with a failure, the service keeps running. It makes more sense to stop the service when ExecStartPost fails. If this behaviour is not desired, the ExecStartPost command can be prefixed with "-".
Diffstat (limited to 'src/service.c')
-rw-r--r--src/service.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/service.c b/src/service.c
index 07137d265d..5243e690df 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2870,20 +2870,22 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
break;
case SERVICE_START_POST:
- if (success) {
- if (s->pid_file) {
- int r = service_load_pid_file(s, true);
- if (r < 0) {
- r = service_demand_pid_file(s);
- if (r < 0 || !cgroup_good(s))
- service_enter_stop(s, false);
- break;
- }
- } else
- service_search_main_pid(s);
+ if (!success) {
+ service_enter_stop(s, false);
+ break;
}
- s->reload_failure = !success;
+ if (s->pid_file) {
+ int r = service_load_pid_file(s, true);
+ if (r < 0) {
+ r = service_demand_pid_file(s);
+ if (r < 0 || !cgroup_good(s))
+ service_enter_stop(s, false);
+ break;
+ }
+ } else
+ service_search_main_pid(s);
+
service_enter_running(s, true);
break;