mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-27 15:12:11 +00:00
haproxy public development tree
7348119fb2
There seems to be a tricky case in the H2 mux related to stream flow control versus buffer a full situation : is a large response cannot be entirely sent to the client due to the stream window being too small, the stream is paused with the SFCTL flag. Then the upper layer stream might get bored and expire this stream. It will then shut it down first. But the shutdown operation might fail if the mux buffer is full, resulting in the h2s being subscribed to the deferred_shut event with the stream *not* added to the send_list since it's blocked in SFCTL. In the mean time the upper layer completely closes, calling h2_detach(). There we have a send_wait (the pending shutw), the stream is marked with SFCTL so we orphan it. Then if the client finally reads all the data that were clogging the buffer, the send_list is run again, but our stream is not there. From this point, the connection's stream list is not empty, the mux buffer is empty, so the connection's timeout is not set. If the client disappears without updating the stream's window, nothing will expire the connection. This patch makes sure we always keep the connection timeout updated. There might be finer solutions, such as checking that there are still living streams in the connection (i.e. streams not blocked in SFCTL state), though this is not necessarily trivial nor useful, since the client timeout is the same for the upper level stream and the connection anyway. This patch needs to be backported to 1.9 and 1.8 after some observation. |
||
---|---|---|
.github/ISSUE_TEMPLATE | ||
contrib | ||
doc | ||
ebtree | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitignore | ||
.travis.yml | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
ROADMAP | ||
SUBVERS | ||
VERDATE | ||
VERSION |
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 - 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)