From: Olivier Houchard Date: Thu, 26 Jul 2018 14:19:58 +0000 (+0200) Subject: MINOR: tasks: Add a flag that tells if we're in the global runqueue. X-Git-Tag: v1.9-dev1~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=76e45181b2767de0d85515763264692083dbc454;p=thirdparty%2Fhaproxy.git MINOR: tasks: Add a flag that tells if we're in the global runqueue. How that we have bits available in task->state, add a flag that tells if we're in the global runqueue or not. --- diff --git a/include/proto/task.h b/include/proto/task.h index 8aceee508b..3969dc30ce 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -181,6 +181,8 @@ static inline struct task *__task_unlink_rq(struct task *t) { HA_ATOMIC_SUB(&tasks_run_queue, 1); eb32sc_delete(&t->rq); + if (t->state & TASK_GLOBAL) + HA_ATOMIC_AND(&t->state, ~TASK_GLOBAL); if (likely(t->nice)) HA_ATOMIC_SUB(&niced_tasks, 1); return t; diff --git a/include/types/task.h b/include/types/task.h index c001d45e21..bc64f43f58 100644 --- a/include/types/task.h +++ b/include/types/task.h @@ -32,6 +32,7 @@ /* values for task->state */ #define TASK_SLEEPING 0x0000 /* task sleeping */ #define TASK_RUNNING 0x0001 /* the task is currently running */ +#define TASK_GLOBAL 0x0002 /* The task is currently in the global runqueue */ #define TASK_WOKEN_INIT 0x0100 /* woken up for initialisation purposes */ #define TASK_WOKEN_TIMER 0x0200 /* woken up because of expired timer */ diff --git a/src/task.c b/src/task.c index df2435a713..94482ecf15 100644 --- a/src/task.c +++ b/src/task.c @@ -143,6 +143,7 @@ redo: #ifdef USE_THREAD if (root == &rqueue) { global_rqueue_size++; + HA_ATOMIC_OR(&t->state, TASK_GLOBAL); HA_SPIN_UNLOCK(TASK_RQ_LOCK, &rq_lock); } else #endif