diff --git a/include/proto/task.h b/include/proto/task.h index 1f4b52e97..fdf4d6a64 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -92,7 +92,6 @@ extern struct pool_head *pool_head_task; extern struct pool_head *pool_head_tasklet; extern struct pool_head *pool_head_notification; extern THREAD_LOCAL struct task *curr_task; /* task currently running or NULL */ -extern THREAD_LOCAL struct eb32sc_node *rq_next; /* Next task to be potentially run */ #ifdef USE_THREAD extern struct eb_root timers; /* sorted timers tree, global */ extern struct eb_root rqueue; /* tree constituting the run queue */ @@ -229,11 +228,8 @@ static inline struct task *task_unlink_rq(struct task *t) if (is_global) HA_SPIN_LOCK(TASK_RQ_LOCK, &rq_lock); - if (likely(task_in_rq(t))) { - if (&t->rq == rq_next) - rq_next = eb32sc_next(rq_next, tid_bit); + if (likely(task_in_rq(t))) __task_unlink_rq(t); - } if (is_global) HA_SPIN_UNLOCK(TASK_RQ_LOCK, &rq_lock); return t; diff --git a/src/task.c b/src/task.c index 9dddd89f7..aa980485b 100644 --- a/src/task.c +++ b/src/task.c @@ -42,7 +42,6 @@ unsigned int nb_tasks_cur = 0; /* copy of the tasks count */ unsigned int niced_tasks = 0; /* number of niced tasks in the run queue */ THREAD_LOCAL struct task *curr_task = NULL; /* task currently running or NULL */ -THREAD_LOCAL struct eb32sc_node *rq_next = NULL; /* Next task to be potentially run */ __decl_aligned_spinlock(rq_lock); /* spin lock related to run queue */ __decl_aligned_spinlock(wq_lock); /* spin lock related to wait queue */ @@ -317,6 +316,7 @@ int wake_expired_tasks() */ void process_runnable_tasks() { + struct eb32sc_node *rq_next; struct task *t; int max_processed;