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
This commit is contained in:
Olivier Houchard 2019-05-02 12:04:15 +02:00 committed by Olivier Houchard
parent 55071d30ca
commit a48237fd07
2 changed files with 3 additions and 2 deletions

View File

@ -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;

View File

@ -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