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 8aceee5..3969dc3 100644
--- a/include/proto/task.h
+++ b/include/proto/task.h
@@ -181,6 +181,8 @@
{
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 c001d45..bc64f43 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 df2435a..94482ec 100644
--- a/src/task.c
+++ b/src/task.c
@@ -143,6 +143,7 @@
#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