From 76b44195c9020e0f2cab4d983e9346d9de6c895f Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 16 Apr 2021 11:33:39 +0200 Subject: [PATCH] MINOR: threads: Only consider running threads to end a thread harmeless period When a thread ends its harmeless period, we must only consider running threads when testing threads_want_rdv_mask mask. To do so, we reintroduce all_threads_mask mask in the bitwise operation (It was removed to fix a deadlock). Note that for now it is useless because there is no way to stop threads or to have threads reserved for another task. But it is safer this way to avoid bugs in the future. --- include/haproxy/thread.h | 2 +- src/thread.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/haproxy/thread.h b/include/haproxy/thread.h index af909f1..e7d6d2c 100644 --- a/include/haproxy/thread.h +++ b/include/haproxy/thread.h @@ -265,7 +265,7 @@ static inline void thread_harmless_end() { while (1) { HA_ATOMIC_AND(&threads_harmless_mask, ~tid_bit); - if (likely((threads_want_rdv_mask & ~tid_bit) == 0)) + if (likely((threads_want_rdv_mask & all_threads_mask & ~tid_bit) == 0)) break; thread_harmless_till_end(); } diff --git a/src/thread.c b/src/thread.c index 742e47c..07017dd 100644 --- a/src/thread.c +++ b/src/thread.c @@ -56,7 +56,7 @@ struct lock_stat lock_stats[LOCK_LABELS]; void thread_harmless_till_end() { _HA_ATOMIC_OR(&threads_harmless_mask, tid_bit); - while (threads_want_rdv_mask & ~tid_bit) { + while (threads_want_rdv_mask & all_threads_mask & ~tid_bit) { ha_thread_relax(); } } -- 1.7.10.4