From: Olivier Houchard Date: Thu, 2 May 2019 10:04:15 +0000 (+0200) Subject: BUG/MEDIUM: connections: Make sure we remove CO_FL_SESS_IDLE on disown. X-Git-Tag: v2.0-dev3~133 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a48237fd0707a78a353613a45130f4b433b19b0f;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: connections: Make sure we remove CO_FL_SESS_IDLE on disown. When for some reason the session is not the owner of the connection anymore, make sure we remove CO_FL_SESS_IDLE, even if we're about to call conn->mux->destroy(), as the destroy may not destroy the connection immediately if it's still in use. This should be backported to 1.9. u --- diff --git a/include/proto/session.h b/include/proto/session.h index 2ff8e382d2..eabebb85af 100644 --- a/include/proto/session.h +++ b/include/proto/session.h @@ -124,12 +124,12 @@ static inline int session_check_idle_conn(struct session *sess, struct connectio /* We can't keep the connection, let's try to add it to the server idle list */ session_unown_conn(sess, conn); conn->owner = NULL; + conn->flags &= ~CO_FL_SESS_IDLE; if (!srv_add_to_idle_list(objt_server(conn->target), conn)) { /* The server doesn't want it, let's kill the connection right away */ conn->mux->destroy(conn->ctx); return -1; - } else - conn->flags &= ~CO_FL_SESS_IDLE; + } return 1; } else { conn->flags |= CO_FL_SESS_IDLE; diff --git a/src/backend.c b/src/backend.c index d7695bf2ce..e41689d2a9 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1406,6 +1406,7 @@ int connect_server(struct stream *s) session_unown_conn(s->sess, old_conn); old_conn->owner = sess; if (!session_add_conn(sess, old_conn, old_conn->target)) { + old_conn->flags &= ~CO_FL_SESS_IDLE; old_conn->owner = NULL; old_conn->mux->destroy(old_conn->ctx); } else