mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-28 01:01:18 +02:00
Each fd_{may|cant|stop|want}_{recv|send} function sets or resets a single bit at once, then recomputes the need for updates, and then the new cache state. Later, pollers will compute the new polling state based on the resulting operations here. In fact the conditions are so simple that they can be performed by a single "if", or sometimes even optimized away. This means that in practice a simple compare-and-swap operation if often enough to set the new value inluding the new polling state, and that only the cache and fdupdt have to be performed under the lock. Better, for the most common operations (fd_may_{recv,send}, used by the pollers), a simple atomic OR is needed. This patch does this for the fd_* functions above and it doesn't yet remove the now useless fd_compute_new_polling_status() because it's still used by other pollers. A pure connection rate test shows a 1% performance increase.