From: Willy Tarreau Date: Tue, 7 Aug 2018 08:07:15 +0000 (+0200) Subject: BUG/MEDIUM: threads: fix the no-thread case after the change to the sync point X-Git-Tag: v1.9-dev2~198 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab657ce2511c4e19b0191fbe1c98cfd823a3c5d6;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: threads: fix the no-thread case after the change to the sync point In commit 0c026f4 ("MINOR: threads: add more consistency between certain variables in no-thread case"), we ensured that we don't have all_threads_mask zeroed anymore. But one test was missed for the write() to the sync pipe. This results in a situation where when running single-threaded, once a server status changes, a wake-up message is written to the pipe and never consumed, showing a 100% CPU usage. No backport is needed. --- diff --git a/src/hathreads.c b/src/hathreads.c index 69dcab9dcd..16284be14e 100644 --- a/src/hathreads.c +++ b/src/hathreads.c @@ -70,7 +70,7 @@ void thread_sync_enable(void) */ void thread_want_sync() { - if (all_threads_mask) { + if (all_threads_mask & (all_threads_mask - 1)) { if (threads_want_sync & tid_bit) return; if (HA_ATOMIC_OR(&threads_want_sync, tid_bit) == tid_bit)