mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-20 21:31:28 +02:00
MEDIUM: servers: Used a locked list for idle_orphan_conns.
Use the locked macros when manipulating idle_orphan_conns, so that other threads can remove elements from it. It will be useful later to avoid having a task per server and per thread to cleanup the orphan list.
This commit is contained in:
parent
a8434ec146
commit
7f1bc31fee
@ -698,7 +698,7 @@ static inline void conn_free(struct connection *conn)
|
||||
}
|
||||
|
||||
conn_force_unsubscribe(conn);
|
||||
LIST_DEL(&conn->list);
|
||||
LIST_DEL_LOCKED(&conn->list);
|
||||
LIST_INIT(&conn->list);
|
||||
pool_free(pool_head_connection, conn);
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ static inline int srv_add_to_idle_list(struct server *srv, struct connection *co
|
||||
return 0;
|
||||
}
|
||||
LIST_DEL(&conn->list);
|
||||
LIST_ADDQ(&srv->idle_orphan_conns[tid], &conn->list);
|
||||
LIST_ADDQ_LOCKED(&srv->idle_orphan_conns[tid], &conn->list);
|
||||
srv->curr_idle_thr[tid]++;
|
||||
|
||||
conn->idle_time = now_ms;
|
||||
|
@ -1307,9 +1307,12 @@ int connect_server(struct stream *s)
|
||||
(((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_ALWS) ||
|
||||
(((s->be->options & PR_O_REUSE_MASK) != PR_O_REUSE_NEVR) &&
|
||||
s->txn && (s->txn->flags & TX_NOT_FIRST)))) {
|
||||
srv_conn = LIST_ELEM(srv->idle_orphan_conns[tid].n,
|
||||
srv_conn = LIST_POP_LOCKED(&srv->idle_orphan_conns[tid],
|
||||
struct connection *, list);
|
||||
reuse_orphan = 1;
|
||||
if (srv_conn) {
|
||||
LIST_INIT(&srv_conn->list);
|
||||
reuse_orphan = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we've picked a connection from the pool, we now have to
|
||||
@ -1341,7 +1344,6 @@ int connect_server(struct stream *s)
|
||||
* list and add it back to the idle list.
|
||||
*/
|
||||
if (reuse && reuse_orphan) {
|
||||
LIST_DEL(&srv_conn->list);
|
||||
srv_conn->idle_time = 0;
|
||||
HA_ATOMIC_SUB(&srv->curr_idle_conns, 1);
|
||||
srv->curr_idle_thr[tid]--;
|
||||
|
Loading…
x
Reference in New Issue
Block a user