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.
This commit is contained in:
Olivier Houchard 2018-12-15 22:42:20 +01:00 committed by Willy Tarreau
parent 27d93c3f94
commit 2c68a462e1

View File

@ -2997,11 +2997,20 @@ static struct task *h2_deferred_shut(struct task *t, void *ctx, unsigned short s
struct h2s *h2s = ctx; struct h2s *h2s = ctx;
long reason = (long)h2s->wait_event.handle; long reason = (long)h2s->wait_event.handle;
if (reason & 1) if (h2s->send_wait) {
h2_do_shutr(h2s); h2s->send_wait->wait_reason &= ~SUB_CALL_UNSUBSCRIBE;
h2s->send_wait = NULL;
LIST_DEL(&h2s->list);
LIST_INIT(&h2s->list);
}
if (reason & 2) if (reason & 2)
h2_do_shutw(h2s); 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; return NULL;
} }