From 135a113e369ad0afc58f326f4811858f8bf770e5 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 21 Mar 2009 13:26:05 +0100 Subject: [PATCH] [MINOR] sched: permit a task to stay up between calls If a task wants to stay in the run queue, it is possible. It just needs to wake itself up. We just want to ensure that a reniced task will be processed at the right instant. --- src/task.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/task.c b/src/task.c index 17d825e59..72e3a93e5 100644 --- a/src/task.c +++ b/src/task.c @@ -225,6 +225,13 @@ void process_runnable_tasks(int *next) task_queue(t); expire = tick_first_2nz(expire, t->expire); } + + /* if the task has put itself back into the run queue, we want to ensure + * it will be served at the proper time, especially if it's reniced. + */ + if (unlikely(task_in_rq(t)) && (!eb || tick_is_lt(t->rq.key, eb->key))) { + eb = eb32_lookup_ge(&rqueue, rqueue_ticks - TIMER_LOOK_BACK); + } } } *next = expire;