mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +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.
|
* 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)
|
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)
|
void srv_set_dyncookie(struct server *s)
|
||||||
{
|
{
|
||||||
@ -139,7 +140,7 @@ void srv_set_dyncookie(struct server *s)
|
|||||||
int addr_len;
|
int addr_len;
|
||||||
int port;
|
int port;
|
||||||
|
|
||||||
HA_RWLOCK_WRLOCK(PROXY_LOCK, &p->lock);
|
HA_RWLOCK_RDLOCK(PROXY_LOCK, &p->lock);
|
||||||
|
|
||||||
if ((s->flags & SRV_F_COOKIESET) ||
|
if ((s->flags & SRV_F_COOKIESET) ||
|
||||||
!(s->proxy->ck_opts & PR_CK_DYNAMIC) ||
|
!(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))
|
if (!(s->next_admin & SRV_ADMF_FMAINT))
|
||||||
srv_check_for_dup_dyncookie(s);
|
srv_check_for_dup_dyncookie(s);
|
||||||
out:
|
out:
|
||||||
HA_RWLOCK_WRUNLOCK(PROXY_LOCK, &p->lock);
|
HA_RWLOCK_RDUNLOCK(PROXY_LOCK, &p->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user