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.
@@ -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);
+
+ }
}
/*
