]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: mux-h2: always process a pending shut read
authorWilly Tarreau <w@1wt.eu>
Fri, 19 Nov 2021 10:41:10 +0000 (11:41 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 19 Nov 2021 11:10:02 +0000 (12:10 +0100)
commit3a8bbcc38e3fe623fe9a9f2d61f483d4e3936fc5
treeffaa825ade23cb177dc715a5d99be255b3bb4177
parente5f5948858fe01209bc117c16cb0405302cb9e1e
BUG/MEDIUM: mux-h2: always process a pending shut read

During 2.4-dev, an issue with partial frames was fixed with commit
3d4631fec ("BUG/MEDIUM: mux-h2: fix read0 handling on partial frames").
However this patch is not completely correct. It makes h2_recv() return
0 if the connection was shut for reads, but this not make h2_io_cb()
call h2_process(), so if there are any pending data left in the demux
buffer, they will never be processed, and the I/O callback will be
called in loops forever from the poller.

The correct return value there is 1, as is done at the end of the
function to report a pending read0.

This should definitely fix issue #1328. However even after a lot of
tests I couldn't manage to reproduce it, the conditions to enter that
situation are quite racy.

This must be backported to 2.0 since the fix above was merged into
2.0.21 and 2.2.9.
src/mux_h2.c