From: Willy Tarreau Date: Tue, 7 Nov 2017 08:43:06 +0000 (+0100) Subject: BUG/MEDIUM: h2: properly send an RST_STREAM on mux stream error X-Git-Tag: v1.8-rc3~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6795ca7c1845746838c27f4cc201aa560733af1;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: h2: properly send an RST_STREAM on mux stream error Some stream errors are detected on the MUX path (eg: H1 response encoding). The ones forgot to emit an RST_STREAM frame, causing the client to wait and/or to see the connection being immediately closed. This is now fixed. --- diff --git a/src/mux_h2.c b/src/mux_h2.c index 2af5ffd630..28b1684892 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -2986,15 +2986,19 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags) } } + /* RST are sent similarly to frame acks */ + if (h2s->st == H2_SS_ERROR) { + cs->flags |= CS_FL_ERROR; + if (h2c_send_rst_stream(h2s->h2c, h2s) > 0) + h2s->st = H2_SS_CLOSED; + } + if (h2s->flags & H2_SF_BLK_SFCTL) { /* stream flow control, quit the list */ LIST_DEL(&h2s->list); LIST_INIT(&h2s->list); } - if (h2s->st == H2_SS_ERROR) - cs->flags |= CS_FL_ERROR; - return total; }