From 2c68a462e1749c9f65a3b753951c82ceeb7e0ecd Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Sat, 15 Dec 2018 22:42:20 +0100 Subject: [PATCH] BUG/MEDIUM: h2: Don't forget to destroy the h2s after deferred shut. If we had to defer shutr/shutw, and we're now done, destroy the h2s, or nobody will do so. --- src/mux_h2.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index d13bd9582..a0357be4b 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -2997,11 +2997,20 @@ static struct task *h2_deferred_shut(struct task *t, void *ctx, unsigned short s struct h2s *h2s = ctx; long reason = (long)h2s->wait_event.handle; - if (reason & 1) - h2_do_shutr(h2s); + if (h2s->send_wait) { + h2s->send_wait->wait_reason &= ~SUB_CALL_UNSUBSCRIBE; + h2s->send_wait = NULL; + LIST_DEL(&h2s->list); + LIST_INIT(&h2s->list); + } if (reason & 2) h2_do_shutw(h2s); + if (reason & 1) + h2_do_shutr(h2s); + if (h2s->st == H2_SS_CLOSED && + !((h2s->flags & (H2_SF_BLK_MBUSY | H2_SF_BLK_MROOM | H2_SF_BLK_MFCTL)))) + h2s_destroy(h2s); return NULL; }