From: Christopher Faulet Date: Wed, 14 Apr 2021 12:02:25 +0000 (+0200) Subject: BUG/MEDIUM: threads: Ignore current thread to end its harmless period X-Git-Tag: v2.4-dev17~108 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f63a18550073e821976606f9602c261976939ae9;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: threads: Ignore current thread to end its harmless period A previous patch was pushed to fix a deadlock when an isolated thread ends its harmless period (a9a9e9aac ["BUG/MEDIUM: thread: Fix a deadlock if an isolated thread is marked as harmless"]). But, unfortunately, the fix is incomplete. The same must be done in the outer loop, in thread_harmless_end() function. The current thread must be ignored when threads_want_rdv_mask mask is tested. This patch must also be backported as far as 2.0. --- diff --git a/include/haproxy/thread.h b/include/haproxy/thread.h index 1a0813f64c..af909f1702 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 & all_threads_mask) == 0)) + if (likely((threads_want_rdv_mask & ~tid_bit) == 0)) break; thread_harmless_till_end(); }