From a669c9402f67fe182a45924d6eb25d76cfd722e5 Mon Sep 17 00:00:00 2001 From: Ming Liu Date: Sat, 5 Feb 2022 14:23:17 +0100 Subject: [PATCH] service.c: set/clear condition 'done' for run tasks We like to know when a runtask (run/task/sysv)is done, so as to start the services that depending on it, set a oneshot condition 'done' for that case and clear it when runtask services enter HALTED state. Signed-off-by: Ming Liu --- src/service.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/service.c b/src/service.c index 5c913fa1..390eb216 100644 --- a/src/service.c +++ b/src/service.c @@ -1677,6 +1677,21 @@ static void svc_set_state(svc_t *svc, svc_state_t new) service_timeout_cancel(svc); service_timeout_after(svc, svc->killdelay, service_kill); } + + if (svc_is_runtask(svc)) { + char cond[MAX_COND_LEN]; + + snprintf(done, sizeof(done), "%s/%s/done", svc->type, svc->name); + + /* create done condition when entering SVC_DONE_STATE. */ + if (*state == SVC_DONE_STATE) + cond_set_oneshot(cond); + + /* clear done condition when entering SVC_HALTED_STATE. */ + if (*state == SVC_HALTED_STATE) + cond_clear(cond); + + } } /*