From: Olivier Houchard Date: Mon, 28 May 2018 11:51:06 +0000 (+0200) Subject: BUG/MEDIUM: tasks: Don't forget to increase/decrease tasks_run_queue. X-Git-Tag: v1.9-dev1~235 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09eeb76;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: tasks: Don't forget to increase/decrease tasks_run_queue. Don't forget to increase tasks_run_queue when we're adding a task to the tasklet list, and to decrease it when we remove a task from a runqueue, or its value won't be accurate, and could lead to tasks not being executed when put in the global run queue. 1.9-dev only, no backport is needed. --- diff --git a/include/proto/task.h b/include/proto/task.h index c8004143bb..ef296f6e97 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -177,6 +177,7 @@ static inline struct task *task_unlink_wq(struct task *t) */ static inline struct task *__task_unlink_rq(struct task *t) { + HA_ATOMIC_SUB(&tasks_run_queue, 1); eb32sc_delete(&t->rq); if (likely(t->nice)) HA_ATOMIC_SUB(&niced_tasks, 1); @@ -219,6 +220,7 @@ static inline void task_insert_into_tasklet_list(struct task *t) */ if (unlikely(!HA_ATOMIC_CAS(&t->rq.node.leaf_p, &expected, 0x1))) return; + HA_ATOMIC_ADD(&tasks_run_queue, 1); task_list_size[tid]++; tl = (struct tasklet *)t; LIST_ADDQ(&task_list[tid], &tl->list);