From: Christopher Faulet Date: Tue, 13 May 2025 16:05:26 +0000 (+0200) Subject: BUG/MINOR: mux-spop: Don't report error for stream if ACK was already received X-Git-Tag: v3.2-dev16~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d68beace5435f24abc4292f22021e4465b4dcee;p=thirdparty%2Fhaproxy.git BUG/MINOR: mux-spop: Don't report error for stream if ACK was already received When a SPOP connection was closed or was in error, an error was systematically reported on all its SPOP streams. However, SPOP streams that already received their ACK frame must be excluded. Otherwise if an agent sends a ACK and close immediately, the ACK will be ignored because the SPOP stream will handle the error first. This patch must be backported to 3.1. --- diff --git a/src/mux_spop.c b/src/mux_spop.c index 2513c3078..c55074c24 100644 --- a/src/mux_spop.c +++ b/src/mux_spop.c @@ -1291,7 +1291,7 @@ static void spop_strm_wake_one_stream(struct spop_strm *spop_strm) spop_strm_close(spop_strm); } - if (spop_conn->state == SPOP_CS_CLOSED || (spop_conn->flags & (SPOP_CF_ERR_PENDING|SPOP_CF_ERROR))) { + if (!(spop_strm->flags & SPOP_SF_ACK_RCVD) && (spop_conn->state == SPOP_CS_CLOSED || (spop_conn->flags & (SPOP_CF_ERR_PENDING|SPOP_CF_ERROR)))) { se_fl_set_error(spop_strm->sd); spop_strm_propagate_term_flags(spop_conn, spop_strm); if (!spop_strm->sd->abort_info.info) {