From: Willy Tarreau Date: Sat, 21 Mar 2009 12:26:05 +0000 (+0100) Subject: [MINOR] sched: permit a task to stay up between calls X-Git-Tag: v1.3.16~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=135a113e369ad0afc58f326f4811858f8bf770e5;p=thirdparty%2Fhaproxy.git [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. --- diff --git a/src/task.c b/src/task.c index 17d825e595..72e3a93e5c 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;