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