mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 13:51:26 +02:00
MINOR: server: read-lock the cookie during srv_set_dyncookie()
No need to use an exclusive lock on the proxy anymore when reading its setting, a read lock is enough. A few other places continue to use a write-lock when modifying simple flags only in order to let this function see a consistent value all along. This might be changed in the future using barriers and local copies.
This commit is contained in:
parent
ac66d6bafb
commit
595e767030
@ -103,7 +103,8 @@ int srv_getinter(const struct check *check)
|
||||
|
||||
/*
|
||||
* Check that we did not get a hash collision.
|
||||
* Unlikely, but it can happen.
|
||||
* Unlikely, but it can happen. The server's proxy must be at least
|
||||
* read-locked.
|
||||
*/
|
||||
static inline void srv_check_for_dup_dyncookie(struct server *s)
|
||||
{
|
||||
@ -127,7 +128,7 @@ static inline void srv_check_for_dup_dyncookie(struct server *s)
|
||||
}
|
||||
|
||||
/*
|
||||
* Must be called with the server lock held, and will grab the proxy lock.
|
||||
* Must be called with the server lock held, and will read-lock the proxy.
|
||||
*/
|
||||
void srv_set_dyncookie(struct server *s)
|
||||
{
|
||||
@ -139,7 +140,7 @@ void srv_set_dyncookie(struct server *s)
|
||||
int addr_len;
|
||||
int port;
|
||||
|
||||
HA_RWLOCK_WRLOCK(PROXY_LOCK, &p->lock);
|
||||
HA_RWLOCK_RDLOCK(PROXY_LOCK, &p->lock);
|
||||
|
||||
if ((s->flags & SRV_F_COOKIESET) ||
|
||||
!(s->proxy->ck_opts & PR_CK_DYNAMIC) ||
|
||||
@ -188,7 +189,7 @@ void srv_set_dyncookie(struct server *s)
|
||||
if (!(s->next_admin & SRV_ADMF_FMAINT))
|
||||
srv_check_for_dup_dyncookie(s);
|
||||
out:
|
||||
HA_RWLOCK_WRUNLOCK(PROXY_LOCK, &p->lock);
|
||||
HA_RWLOCK_RDUNLOCK(PROXY_LOCK, &p->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user