diff --git a/src/task.c b/src/task.c index 56ba69efe..a9c501abb 100644 --- a/src/task.c +++ b/src/task.c @@ -77,7 +77,7 @@ void __task_wakeup(struct task *t, struct eb_root *root) _HA_ATOMIC_ADD(&tasks_run_queue, 1); #ifdef USE_THREAD if (root == &rqueue) { - _HA_ATOMIC_OR(&global_tasks_mask, t->thread_mask); + global_tasks_mask |= t->thread_mask; __ha_barrier_atomic_store(); } #endif @@ -302,8 +302,8 @@ void process_runnable_tasks() if (unlikely(!grq)) { grq = eb32sc_first(&rqueue, tid_bit); if (!grq) { + global_tasks_mask &= ~tid_bit; HA_SPIN_UNLOCK(TASK_RQ_LOCK, &rq_lock); - _HA_ATOMIC_AND(&global_tasks_mask, ~tid_bit); } } #endif @@ -335,8 +335,8 @@ void process_runnable_tasks() if (unlikely(!grq)) { grq = eb32sc_first(&rqueue, tid_bit); if (!grq) { + global_tasks_mask &= ~tid_bit; HA_SPIN_UNLOCK(TASK_RQ_LOCK, &rq_lock); - _HA_ATOMIC_AND(&global_tasks_mask, ~tid_bit); } } }