X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=service.c;h=84077a19f1ced83a8097f08544a126647fe95448;hb=3a76266192da84f6f7b84725e7647c82f8407278;hp=eb8688671b0d4c132921f748cabd2d7a75b09873;hpb=e558336f7b1c69c7335752642327dd1a737eeb15;p=elogind.git diff --git a/service.c b/service.c index eb8688671..84077a19f 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; }