From 9e7e92b4b768c3f6e64672e796a42ca31860835f Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Mon, 4 Sep 2017 16:02:23 +0200 Subject: [PATCH] run stanzas are never caught in service_monitor() A run stanza blocks operation by calling waitpid(), so it will never be caught by the service_monitor() function. Hence, we need to clean up any bootsrap calls after waitpid(), or at least perform a manual state change. Signed-off-by: Joachim Nilsson --- src/service.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/service.c b/src/service.c index 87ee2f11..6293e4e1 100644 --- a/src/service.c +++ b/src/service.c @@ -44,6 +44,7 @@ #define RESPAWN_MAX 10 /* Prevent endless respawn of faulty services. */ +static void svc_set_state(svc_t *svc, svc_state_t new); /** * service_enabled - Should the service run? @@ -311,7 +312,10 @@ static int service_start(svc_t *svc) if (SVC_TYPE_RUN == svc->type) { result = WEXITSTATUS(complete(svc->cmd, pid)); - svc->pid = 0; + if (!svc_clean_bootstrap(svc)) { + svc->pid = 0; + svc_set_state(svc, SVC_STOPPING_STATE); + } } sigprocmask(SIG_SETMASK, &omask, NULL);