]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: threads: Ignore current thread to end its harmless period
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 14 Apr 2021 12:02:25 +0000 (14:02 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Sat, 17 Apr 2021 09:14:58 +0000 (11:14 +0200)
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.

include/haproxy/thread.h

index 1a0813f64c1a3a7a2fb7dac6080910c9545c0fe7..af909f1702f59c8e006fab38e8b702f30a2f80d7 100644 (file)
@@ -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();
        }