diff --git a/src/mux_h2.c b/src/mux_h2.c index 8c73cce45..c4588eec5 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -3162,7 +3162,7 @@ static void h2_do_shutr(struct h2s *h2s) struct h2c *h2c = h2s->h2c; struct wait_event *sw = &h2s->wait_event; - if (h2s->st == H2_SS_HLOC || h2s->st == H2_SS_ERROR || h2s->st == H2_SS_CLOSED) + if (h2s->st == H2_SS_CLOSED) goto done; /* a connstream may require us to immediately kill the whole connection @@ -3215,10 +3215,11 @@ static void h2_do_shutw(struct h2s *h2s) struct h2c *h2c = h2s->h2c; struct wait_event *sw = &h2s->wait_event; - if (h2s->st == H2_SS_HLOC || h2s->st == H2_SS_ERROR || h2s->st == H2_SS_CLOSED) + if (h2s->st == H2_SS_CLOSED) goto done; - if (h2s->flags & H2_SF_HEADERS_SENT) { + if (h2s->st != H2_SS_HLOC && h2s->st != H2_SS_ERROR && + (h2s->flags & H2_SF_HEADERS_SENT)) { /* we can cleanly close using an empty data frame only after headers */ if (!(h2s->flags & (H2_SF_ES_SENT|H2_SF_RST_SENT)) &&