mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-04 11:12:02 +00:00
MINOR: backend: compare conn hash for session conn reuse
Compare the connection hash when reusing a connection from the session. This ensures that a private connection is reused only if it shares the same set of parameters.
This commit is contained in:
parent
1a58aca84e
commit
293dcc400e
@ -200,7 +200,7 @@ static inline int session_check_idle_conn(struct session *sess, struct connectio
|
||||
* list of the session <sess>. It returns a connection if found. Otherwise it
|
||||
* returns NULL.
|
||||
*/
|
||||
static inline struct connection *session_get_conn(struct session *sess, void *target)
|
||||
static inline struct connection *session_get_conn(struct session *sess, void *target, int64_t hash)
|
||||
{
|
||||
struct connection *srv_conn = NULL;
|
||||
struct sess_srv_list *srv_list;
|
||||
@ -208,7 +208,9 @@ static inline struct connection *session_get_conn(struct session *sess, void *ta
|
||||
list_for_each_entry(srv_list, &sess->srv_list, srv_list) {
|
||||
if (srv_list->target == target) {
|
||||
list_for_each_entry(srv_conn, &srv_list->conn_list, session_list) {
|
||||
if (srv_conn->mux && (srv_conn->mux->avail_streams(srv_conn) > 0) &&
|
||||
if (srv_conn->hash == hash &&
|
||||
srv_conn->mux &&
|
||||
(srv_conn->mux->avail_streams(srv_conn) > 0) &&
|
||||
!(srv_conn->flags & CO_FL_WAIT_XPRT)) {
|
||||
if (srv_conn->flags & CO_FL_SESS_IDLE) {
|
||||
srv_conn->flags &= ~CO_FL_SESS_IDLE;
|
||||
|
@ -1268,7 +1268,7 @@ int connect_server(struct stream *s)
|
||||
goto skip_reuse;
|
||||
|
||||
/* first, search for a matching connection in the session's idle conns */
|
||||
srv_conn = session_get_conn(s->sess, s->target);
|
||||
srv_conn = session_get_conn(s->sess, s->target, hash);
|
||||
if (srv_conn)
|
||||
reuse = 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user