commit 4805c249aabc45cd59386694f962e19ab50e8ca9
Author: Willy Tarreau <w@1wt.eu>
Date:   Tue Oct 16 16:57:40 2018 +0200

    BUG/MEDIUM: threads: make sure threads_want_sync is marked volatile
    
    The threads_want_sync variable is not volatile, which allows the compiler
    to cache old copies of it for long parts of code and possibly optimize
    some tests away. This could result in deadlocks when using heavy queue
    activity or health check state changes.
    
    There is no upstream commit for this fix because the sync point was
    completely removed from 1.9. This fix is exclusively for 1.8.
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

diff --git a/src/hathreads.c b/src/hathreads.c
index 0a7c12f7..730ebee4 100644
--- a/src/hathreads.c
+++ b/src/hathreads.c
@@ -29,7 +29,7 @@ void thread_sync_io_handler(int fd)
 
 static HA_SPINLOCK_T sync_lock;
 static int           threads_sync_pipe[2] = {-1, -1};
-static unsigned long threads_want_sync = 0;
+volatile static unsigned long threads_want_sync = 0;
 volatile unsigned long threads_want_rdv_mask = 0;
 volatile unsigned long threads_harmless_mask = 0;
 volatile unsigned long all_threads_mask  = 1; // nbthread 1 assumed by default
