From f0f358a1388a7d1d505d58ef11bfa87d3ffb3490 Mon Sep 17 00:00:00 2001 From: Ming Liu Date: Sat, 5 Feb 2022 18:18:53 +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..4652d10d 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(cond, sizeof(cond), "%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); + + } } /*