]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: stream-int: don't try to read again when CF_READ_DONTWAIT is set
authorWilly Tarreau <w@1wt.eu>
Sat, 18 Nov 2017 10:26:20 +0000 (11:26 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 20 Nov 2017 15:13:16 +0000 (16:13 +0100)
Commit 9aaf778 ("MAJOR: connection : Split struct connection into struct
connection and struct conn_stream.") had to change the way the stream
interface deals with incoming data to accomodate the mux. A break
statement got lost during a change, leading to the receive call being
performed twice even when CF_READ_DONTWAIT is set. The most noticeable
effect is that it made the bug described in commit 33982cb ("BUG/MAJOR:
stream: ensure analysers are always called upon close") much easier to
reproduce as it would appear even with an HTTP frontend.

Let's just restore the stream-interface flag and the break here, as in
the previous code.

No backport is needed as this was introduced during 1.8-dev.

src/stream_interface.c

index 02c3be1b52bf0f3d05e26a70cb46027ff1f1eb05..c2e3fffd4864a6a4aeef05ee0d3e76edca030733 100644 (file)
@@ -1217,6 +1217,8 @@ static void si_cs_recv_cb(struct conn_stream *cs)
                         * but we may have lost a worthwhile optimization.
                         */
                        __cs_stop_recv(cs);
+                       si->flags |= SI_FL_WAIT_ROOM;
+                       break;
                }
 
                /* if too many bytes were missing from last read, it means that