mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-30 06:22:00 +01:00
As identified in issue #278, the backport of commit c594039225 ("BUG/MINOR: checks: do not uselessly poll for reads before the connection is up") introduced a regression in 2.0 when default checks are enabled (not "option tcp-check"), but it did not affect 2.1. What happens is that in 2.0 and earlier we have the fd cache which makes a speculative call to the I/O functions after an attempt to connect, and the __event_srv_chk_r() function was absolutely not designed to be called while a connection attempt is still pending. Thus what happens is that the test for success/failure expects the verdict to be final before waking up the check task, and since the connection is not yet validated, it fails. It will usually work over the loopback depending on scheduling, which is why it doesn't fail in reg tests. In 2.1 after the failed connect(), we subscribe to polling and usually come back with a validated connection, so the function is not expected to be called before it completes, except if it happens as a side effect of some spurious wake calls, which should not have any effect on such a check. The other check types are not impacted by this issue because they all check for a minimum data length in the buffer, and wait for more data until they are satisfied. This patch fixes the issue by explicitly checking that the connection is established before trying to read or to give a verdict. This way the function becomes safe to call regardless of the connection status (even if it's still totally ugly). This fix must be backported to 2.0.
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)
Description
Languages
C
98%
Shell
0.9%
Makefile
0.5%
Lua
0.2%
Python
0.2%