From 6d8b682f9a60a26b4e73c63e8145757f98565616 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 7 Nov 2017 14:39:09 +0100 Subject: [PATCH] BUG/MEDIUM: h2: properly set H2_SF_ES_SENT when sending the final frame When sending DATA+ES, it's important to set H2_SF_ES_SENT as we don't want to emit is several times nor to send an RST afterwards. --- src/mux_h2.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index e1c995516..fad28b695 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -891,16 +891,17 @@ static int h2_send_empty_data_es(struct h2s *h2s) memcpy(str, "\x00\x00\x00\x00\x01", 5); write_n32(str + 5, h2s->id); ret = bo_istput(res, ist2(str, 9)); - if (unlikely(ret <= 0)) { - if (!ret) { - h2c->flags |= H2_CF_MUX_MFULL; - h2s->flags |= H2_SF_BLK_MROOM; - return 0; - } - else { - h2c_error(h2c, H2_ERR_INTERNAL_ERROR); - return 0; - } + if (likely(ret > 0)) { + h2s->flags |= H2_SF_ES_SENT; + } + else if (!ret) { + h2c->flags |= H2_CF_MUX_MFULL; + h2s->flags |= H2_SF_BLK_MROOM; + return 0; + } + else { + h2c_error(h2c, H2_ERR_INTERNAL_ERROR); + return 0; } return ret; }