mirror of
http://git.haproxy.org/git/haproxy.git
synced 2026-02-06 04:13:27 +02:00
There's a small issue with soft stop combined with the incoming connection load balancing. A thread may dispatch a connection to another one at the moment stopping=1 is set, and the second one could stop by seeing (jobs - unstoppable_jobs) == 0 in run_poll_loop(), without ever picking these connections from the queue. This is visible in that it may occasionally cause a connection drop on reload since no remaining thread will ever pick that connection anymore. In order to address this, this patch adds a stopping_thread_mask variable by which threads acknowledge their willingness to stop when their runqueue is empty. And all threads will only stop at this moment, so that if finally some late work arrives in the thread's queue, it still has a chance to process it. This should be backported to 2.1 and 2.0.