summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service.c6
-rw-r--r--service.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/service.c b/service.c
index eb8688671b..84077a19f1 100644
--- a/service.c
+++ b/service.c
@@ -1318,6 +1318,7 @@ static void service_enter_dead(Service *s, bool success, bool allow_restart) {
s->failure = true;
if (allow_restart &&
+ s->allow_restart &&
(s->restart == SERVICE_RESTART_ALWAYS ||
(s->restart == SERVICE_RESTART_ON_SUCCESS && !s->failure))) {
@@ -1721,6 +1722,7 @@ static int service_start(Unit *u) {
s->failure = false;
s->main_pid_known = false;
+ s->allow_restart = true;
service_enter_start_pre(s);
return 0;
@@ -1754,6 +1756,10 @@ static int service_stop(Unit *u) {
assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
+ /* This is a user request, so don't do restarts on this
+ * shutdown. */
+ s->allow_restart = false;
+
service_enter_stop(s, true);
return 0;
}
diff --git a/service.h b/service.h
index 6700229b5c..40bd57e256 100644
--- a/service.h
+++ b/service.h
@@ -110,6 +110,8 @@ struct Service {
bool bus_name_good:1;
+ bool allow_restart:1;
+
bool got_socket_fd:1;
bool sysv_has_lsb:1;