]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: mux-h2: discard contents that are to be sent after a shutdown
authorWilly Tarreau <w@1wt.eu>
Mon, 6 May 2019 13:00:22 +0000 (15:00 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 7 May 2019 09:08:02 +0000 (11:08 +0200)
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.

src/mux_h2.c

index 7abcd80ae4a60dd6e3be2a153082647fbc73cd91..1f0121c5efa6f90548c9c8882846172b3a677b18 100644 (file)
@@ -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, ...)
                 */