From: Peter Morrow Date: Tue, 13 Apr 2021 16:20:42 +0000 (+0100) Subject: core: allow services stuck in reloading state to exit X-Git-Tag: v249-rc1~357^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbe19f68846bb3cd5fcf3e4f612268064df53b53;p=thirdparty%2Fsystemd.git core: allow services stuck in reloading state to exit If a service is in reloading state but has exited do not delay the final exit until the service reload timer expires. Instead allow the service to exit immediately since we can't expect the service to ever transition out of reloading state. For example if a service sent RELOADING=1 but crashed before it could send READY=1 then it should be restarted if the service had Restart= configured. Signed-off-by: Peter Morrow --- diff --git a/src/core/service.c b/src/core/service.c index fb97bbeaae0..d5f79d274ef 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -3474,6 +3474,15 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { case SERVICE_START_POST: case SERVICE_RELOAD: + /* If neither main nor control processes are running then + * the current state can never exit cleanly, hence immediately + * terminate the service. */ + if (control_pid_good(s) <= 0) + service_enter_stop(s, f); + + /* Otherwise need to wait untill the operation is done. */ + break; + case SERVICE_STOP: /* Need to wait until the operation is * done */