diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-01-17 04:52:19 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-01-17 04:54:34 +0100 |
commit | 464876c9c410b2f5bb997259510a13d0ee7d0af0 (patch) | |
tree | 8fe193976368709ad895088846d44f26ea3e3c64 /src/core/service.c | |
parent | abd55b16547d0bb0ed1c31e72e16838f0f59f48b (diff) |
service: properly signal permanent failure of a service to its socket
This makes sure that a service is not indefinitely restarted in a tight
loop if it fails before it is able to process its socket.
This corrects the breakage introduced with
8d1b002a2e389e79a2414491523de549783abf73. Shame on me.
Diffstat (limited to 'src/core/service.c')
-rw-r--r-- | src/core/service.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/core/service.c b/src/core/service.c index ebd0baea89..9e46dbae94 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -1521,6 +1521,9 @@ static void service_set_state(Service *s, ServiceState state) { s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID; } + if (state == SERVICE_FAILED) + service_notify_sockets_dead(s, s->result == SERVICE_FAILURE_START_LIMIT); + if (state == SERVICE_DEAD || state == SERVICE_STOP || state == SERVICE_STOP_SIGTERM || @@ -1528,7 +1531,6 @@ static void service_set_state(Service *s, ServiceState state) { state == SERVICE_STOP_POST || state == SERVICE_FINAL_SIGTERM || state == SERVICE_FINAL_SIGKILL || - state == SERVICE_FAILED || state == SERVICE_AUTO_RESTART) service_notify_sockets_dead(s, false); |