From c6795ca7c1845746838c27f4cc201aa560733af1 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 7 Nov 2017 09:43:06 +0100 Subject: [PATCH] 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. --- src/mux_h2.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index 2af5ffd63..28b168489 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; }