From: Olivier Houchard Date: Sat, 15 Dec 2018 21:42:20 +0000 (+0100) Subject: BUG/MEDIUM: h2: Don't forget to destroy the h2s after deferred shut. X-Git-Tag: v1.9-dev11~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c68a462e1749c9f65a3b753951c82ceeb7e0ecd;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/mux_h2.c b/src/mux_h2.c index d13bd95823..a0357be4b7 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; }