MINOR: tasks/debug: add a few BUG_ON() to detect use of wrong timer queue

This aims at catching calls to task_unlink_wq() performed by the wrong
thread based on the shared status for the task, as well as calls to
__task_queue() with the wrong timer queue being used based on the task's
capabilities. This will at least help eliminate some hypothesis during
debugging sessions when suspecting that a wrong thread has attempted to
queue a task at the wrong place.
This commit is contained in:
Willy Tarreau 2020-07-22 14:29:42 +02:00
parent 2447bce554
commit e5d79bccc0
2 changed files with 7 additions and 0 deletions

View File

@ -221,6 +221,7 @@ static inline struct task *task_unlink_wq(struct task *t)
if (likely(task_in_wq(t))) {
locked = t->state & TASK_SHARED_WQ;
BUG_ON(!locked && t->thread_mask != tid_bit);
if (locked)
HA_RWLOCK_WRLOCK(TASK_WQ_LOCK, &wq_lock);
__task_unlink_wq(t);

View File

@ -192,6 +192,12 @@ void __task_wakeup(struct task *t, struct eb_root *root)
*/
void __task_queue(struct task *task, struct eb_root *wq)
{
#ifdef USE_THREAD
BUG_ON((wq == &timers && !(task->state & TASK_SHARED_WQ)) ||
(wq == &sched->timers && (task->state & TASK_SHARED_WQ)) ||
(wq != &timers && wq != &sched->timers));
#endif
if (likely(task_in_wq(task)))
__task_unlink_wq(task);