X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fservice.c;h=5d82e9b545172516147b59956ac8e386bfd64852;hp=9512e0e98d3b180cac72161a674bcc82bb11220d;hb=2e9d6c1251abc0af9aa5bc53610bd522d55be776;hpb=f0c7b229e1aba12488ffb3ca39f606cc93291f55 diff --git a/src/core/service.c b/src/core/service.c index 9512e0e98..5d82e9b54 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -2436,7 +2436,16 @@ static int service_start(Unit *u) { s->state == SERVICE_START_POST) return 0; - assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED || s->state == SERVICE_AUTO_RESTART); + /* A service that will be restarted must be stopped first to + * trigger BindTo and/or OnFailure dependencies. If a user + * does not want to wait for the holdoff time to elapse, the + * service should be manually restarted, not started. */ + if (s->state == SERVICE_AUTO_RESTART) { + log_warning("%s automatic restart is pending, must be stopped before issuing start request.", UNIT(s)->id); + return -ECANCELED; + } + + assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED); /* Make sure we don't enter a busy loop of some kind. */ r = service_start_limit_test(s);