From cd8aecdb81f2ffb1a6e34a866d6156f8c915a467 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 6 Apr 2008 12:50:29 +0200 Subject: [PATCH] client.c: supervisor task should use post_select instead of pre_select. This allows to get rid of the ugly min_delay hack. This works because the supervisor task is registered _after_ the client task. So when the client task changes its state to either CL_RECEIVING or CL_SENDING in its post_select function, the supervisor task will start the stdin/stout task in the same iteration of the scheduler post_select loop. --- client.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/client.c b/client.c index da1fab27..c97ceb03 100644 --- a/client.c +++ b/client.c @@ -22,7 +22,7 @@ static struct client_task *ct; static struct stdin_task sit; static struct stdout_task sot; -static void supervisor_pre_select(struct sched *s, struct task *t) +static void supervisor_post_select(__a_unused struct sched *s, struct task *t) { if (ct->task.error < 0) { t->error = ct->task.error; @@ -36,7 +36,7 @@ static void supervisor_pre_select(struct sched *s, struct task *t) ct->in_loaded = &sit.loaded; ct->in_error = &sit.task.error; t->error = -E_TASK_STARTED; - goto min_delay; + return; } if (ct->status == CL_RECEIVING) { stdout_set_defaults(&sot); @@ -45,16 +45,12 @@ static void supervisor_pre_select(struct sched *s, struct task *t) sot.input_error = &ct->task.error; register_task(&sot.task); t->error = -E_TASK_STARTED; - goto min_delay; + return; } - return; -min_delay: - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; } static struct task svt = { - .pre_select = supervisor_pre_select, + .post_select = supervisor_post_select, .status = "supervisor task" }; -- 2.39.5