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 d13bd95..a0357be 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -2997,11 +2997,20 @@
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;
}