From: Willy Tarreau Date: Sat, 18 Nov 2017 10:26:20 +0000 (+0100) Subject: BUG/MINOR: stream-int: don't try to read again when CF_READ_DONTWAIT is set X-Git-Tag: v1.8.0~94 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=62dd698070c80d1ee4e779b1f7622386a45508dc;p=thirdparty%2Fhaproxy.git BUG/MINOR: stream-int: don't try to read again when CF_READ_DONTWAIT is set 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. --- diff --git a/src/stream_interface.c b/src/stream_interface.c index 02c3be1b52..c2e3fffd48 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -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