mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +02:00
update_freq_ctr_period() was using relaxed atomics without using barriers, which usually works fine on x86 but not everywhere else. In addition, some values were read without being enclosed by barriers, allowing the compiler to possibly prefetch them a bit earlier. Finally, freq_ctr_total() was also reading these without enough barriers. Let's make explicit use of atomic loads and atomic stores to get rid of this situation. This required to slightly rearrange the freq_ctr_total() loop, which could possibly slightly improve performance under extreme contention by avoiding to reread all fields. A backport may be done to 2.4 if a problem is encountered, but last tests on arm64 with LSE didn't show any issue so this can possibly stay as-is.