mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
OPTIM: lb-first: do not take the server lock on take_conn/drop_conn
The operations are only an insert and a delete into the LB tree, which doesn't require the server's lock at all as the lbprm lock is already held. Let's drop it.
This commit is contained in:
parent
59b0fecfd9
commit
6b96e0e9d2
10
src/lb_fas.c
10
src/lb_fas.c
@ -36,7 +36,7 @@ static inline void fas_remove_from_tree(struct server *s)
|
|||||||
|
|
||||||
/* simply removes a server from a tree.
|
/* simply removes a server from a tree.
|
||||||
*
|
*
|
||||||
* The server's lock and the lbprm's lock must be held.
|
* The lbprm's lock must be held.
|
||||||
*/
|
*/
|
||||||
static inline void fas_dequeue_srv(struct server *s)
|
static inline void fas_dequeue_srv(struct server *s)
|
||||||
{
|
{
|
||||||
@ -49,7 +49,7 @@ static inline void fas_dequeue_srv(struct server *s)
|
|||||||
* reached. It is important to understand that the server weight is not used
|
* reached. It is important to understand that the server weight is not used
|
||||||
* here.
|
* here.
|
||||||
*
|
*
|
||||||
* The server's lock and the lbprm's lock must be held.
|
* The lbprm's lock must be held.
|
||||||
*/
|
*/
|
||||||
static inline void fas_queue_srv(struct server *s)
|
static inline void fas_queue_srv(struct server *s)
|
||||||
{
|
{
|
||||||
@ -66,18 +66,12 @@ static inline void fas_queue_srv(struct server *s)
|
|||||||
*/
|
*/
|
||||||
static void fas_srv_reposition(struct server *s, int locked)
|
static void fas_srv_reposition(struct server *s, int locked)
|
||||||
{
|
{
|
||||||
if (!locked)
|
|
||||||
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
|
|
||||||
|
|
||||||
HA_RWLOCK_WRLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
|
HA_RWLOCK_WRLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
|
||||||
if (s->lb_tree) {
|
if (s->lb_tree) {
|
||||||
fas_dequeue_srv(s);
|
fas_dequeue_srv(s);
|
||||||
fas_queue_srv(s);
|
fas_queue_srv(s);
|
||||||
}
|
}
|
||||||
HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
|
HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
|
||||||
|
|
||||||
if (!locked)
|
|
||||||
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function updates the server trees according to server <srv>'s new
|
/* This function updates the server trees according to server <srv>'s new
|
||||||
|
Loading…
Reference in New Issue
Block a user