From: Willy Tarreau Date: Mon, 6 May 2019 13:00:22 +0000 (+0200) Subject: MEDIUM: mux-h2: discard contents that are to be sent after a shutdown X-Git-Tag: v2.0-dev3~95 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2b778484189735d22c45034b22de4665a745c49d;p=thirdparty%2Fhaproxy.git MEDIUM: mux-h2: discard contents that are to be sent after a shutdown In h2_snd_buf() we discard any possible buffer contents requested to be sent after a close or an error. But in practice we can extend this to any case where the stream is locally half-closed since it means we will never be able to send these data anymore. For now it must not change anything, but it will be used by subsequent patches to discard lone a HTX EOM block arriving after the trailers block. --- diff --git a/src/mux_h2.c b/src/mux_h2.c index 7abcd80ae4..1f0121c5ef 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -5377,7 +5377,7 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun } if (htx) { - while (h2s->st < H2_SS_ERROR && !(h2s->flags & H2_SF_BLK_ANY) && + while (h2s->st < H2_SS_HLOC && !(h2s->flags & H2_SF_BLK_ANY) && count && !htx_is_empty(htx)) { idx = htx_get_head(htx); blk = htx_get_blk(htx, idx); @@ -5481,7 +5481,7 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun total += ret; count -= ret; - if (h2s->st >= H2_SS_ERROR) + if (h2s->st >= H2_SS_HLOC) break; if (h2s->flags & H2_SF_BLK_ANY) @@ -5489,7 +5489,7 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun } done: - if (h2s->st >= H2_SS_ERROR) { + if (h2s->st >= H2_SS_HLOC) { /* trim any possibly pending data after we close (extra CR-LF, * unprocessed trailers, abnormal extra data, ...) */