From: Olivier Houchard Date: Mon, 3 Dec 2018 15:33:19 +0000 (+0100) Subject: BUG/MEDIUM: h1: Destroy a connection after detach if it has no owner. X-Git-Tag: v1.9-dev10~64 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ccff1a3d3e51210acfcd0d9cf5014507319bb65;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: h1: Destroy a connection after detach if it has no owner. Destroy the connection while detaching, even if it has keep alive, if it has no owner, or nobody else will be able to do so. --- diff --git a/src/mux_h1.c b/src/mux_h1.c index b01e5d7684..ff54adc561 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -1722,7 +1722,7 @@ static void h1_detach(struct conn_stream *cs) h1c = h1s->h1c; h1s->cs = NULL; - if (conn_is_back(h1c->conn) && (h1s->flags & H1S_F_WANT_KAL)) { + if (conn_is_back(h1c->conn) && (h1s->flags & H1S_F_WANT_KAL) && h1c->conn->owner) { /* Never ever allow to reuse a connection from a non-reuse backend */ if (h1c->conn && (h1c->px->options & PR_O_REUSE_MASK) == PR_O_REUSE_NEVR) h1c->conn->flags |= CO_FL_PRIVATE; @@ -1746,7 +1746,7 @@ static void h1_detach(struct conn_stream *cs) /* We don't want to close right now unless the connection is in error */ if ((h1c->flags & (H1C_F_CS_ERROR|H1C_F_CS_SHUTW)) || - (h1c->conn->flags & CO_FL_ERROR)) + (h1c->conn->flags & CO_FL_ERROR) || !h1c->conn->owner) h1_release(h1c->conn); else tasklet_wakeup(h1c->wait_event.task);