From 9470d2cd35938db8e053f390c5de0e94eefe254b Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 3 Dec 2017 10:42:59 +0100 Subject: [PATCH] BUG/MINOR: h2: try to abort closed streams as soon as possible The purpose here is to be able to signal receipt of RST_STREAM to streams when they start to provide a response so that the response can be aborted ASAP. Given that RST_STREAM immediately switches the stream to the CLOSED state, we must check for CLOSED in addition to the existing ERROR check. To be backported to 1.8. --- src/mux_h2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index 733687e7bf..0c2fcdeb2f 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -3066,7 +3066,7 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags) if (h2s->res.state < HTTP_MSG_BODY) { total += h2s_frt_make_resp_headers(h2s, buf); - if (h2s->st == H2_SS_ERROR) + if (h2s->st >= H2_SS_ERROR) break; if (h2s->flags & H2_SF_BLK_ANY) @@ -3075,7 +3075,7 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags) else if (h2s->res.state < HTTP_MSG_TRAILERS) { total += h2s_frt_make_resp_data(h2s, buf); - if (h2s->st == H2_SS_ERROR) + if (h2s->st >= H2_SS_ERROR) break; if (h2s->flags & H2_SF_BLK_ANY) @@ -3102,7 +3102,7 @@ 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) { + if (h2s->st >= H2_SS_ERROR) { cs->flags |= CS_FL_ERROR; if (h2s_send_rst_stream(h2s->h2c, h2s) > 0) h2s->st = H2_SS_CLOSED; -- 2.39.5