]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: haproxy: don't wake already stopping threads on exit
authorWilly Tarreau <w@1wt.eu>
Mon, 29 Jun 2020 17:23:19 +0000 (19:23 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 29 Jun 2020 19:54:38 +0000 (21:54 +0200)
Commit d645574 ("MINOR: soft-stop: let the first stopper only signal
other threads") introduced a minor mistake which is that when a stopping
thread signals all other threads, it also signals itself. When
single-threaded, the process constantly wakes up while waiting for
last connections to exit. Let's reintroduce the lost mask to avoid
this.

No backport is needed, this is 2.2-dev only.

src/haproxy.c

index 802a88fbe6bb313cb4df1bd1ec3b6350a479420f..c8c869a6fd158638c4175558dd447ec03dc9942a 100644 (file)
@@ -2926,7 +2926,7 @@ void run_poll_loop()
                                if (_HA_ATOMIC_OR(&stopping_thread_mask, tid_bit) == tid_bit) {
                                        /* notify all threads that stopping was just set */
                                        for (i = 0; i < global.nbthread; i++)
-                                               if ((all_threads_mask >> i) & 1)
+                                               if (((all_threads_mask & ~stopping_thread_mask) >> i) & 1)
                                                        wake_thread(i);
                                }
                        }