From 96257cc5c74784764210c9b9a6d45eea06a492cf Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sat, 25 Jun 2022 15:41:34 +0200 Subject: [PATCH] Let manual:yes run/tasks also end in state 'done' This is a follow-up to #274, in which Andy pointed out that ending up in state 'stopped' was a bit confusing for manual:yes run/tasks. With the following change we let all run/tasks end in state 'done', yet still allow manual:yes ones to transition to 'ready' when the user calls `initctl start foo`. Signed-off-by: Joachim Wiberg --- src/service.c | 8 ++++---- src/svc.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/service.c b/src/service.c index f16d3cb3..ae987e11 100644 --- a/src/service.c +++ b/src/service.c @@ -1893,6 +1893,8 @@ restart: case SVC_DONE_STATE: if (svc_is_changed(svc)) svc_set_state(svc, SVC_HALTED_STATE); + if (svc_is_runtask(svc) && svc_is_manual(svc) && enabled) + svc_set_state(svc, SVC_READY_STATE); break; case SVC_STOPPING_STATE: @@ -1916,11 +1918,9 @@ restart: case SVC_TYPE_TASK: case SVC_TYPE_RUN: - if (svc->manual) { + if (svc->manual) svc_stop(svc); - svc_set_state(svc, SVC_HALTED_STATE); - } else - svc_set_state(svc, SVC_DONE_STATE); + svc_set_state(svc, SVC_DONE_STATE); break; default: diff --git a/src/svc.h b/src/svc.h index 66f3b626..a81dc25e 100644 --- a/src/svc.h +++ b/src/svc.h @@ -231,6 +231,7 @@ static inline int svc_is_sysv (svc_t *svc) { return svc && SVC_TYPE_SYSV static inline int svc_is_tty (svc_t *svc) { return svc && SVC_TYPE_TTY == svc->type; } static inline int svc_is_runtask (svc_t *svc) { return svc && (SVC_TYPE_RUNTASK & svc->type);} static inline int svc_is_forking (svc_t *svc) { return svc && svc->forking; } +static inline int svc_is_manual (svc_t *svc) { return svc && svc->manual; } static inline int svc_in_runlevel (svc_t *svc, int runlevel) { return svc && ISSET(svc->runlevels, runlevel); } static inline int svc_nohup (svc_t *svc) { return svc && (0 == svc->sighup || 0 != svc->args_dirty); }