BUG/MEDIUM: checks: make sure the warmup task takes the server lock
The server warmup task is used when a server uses the "slowstart" parameter. This task affects the server's weight and maxconn, and may dequeue pending connections from the queue. This must be done under the server's lock, which was not the case. This must be backported to 1.9 and 1.8.
This commit is contained in:
parent
223995e8ca
commit
4fc49a9aab
@ -1488,12 +1488,16 @@ static struct task *server_warmup(struct task *t, void *context, unsigned short
|
||||
(s->next_state != SRV_ST_STARTING))
|
||||
return t;
|
||||
|
||||
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
|
||||
|
||||
/* recalculate the weights and update the state */
|
||||
server_recalc_eweight(s, 1);
|
||||
|
||||
/* probably that we can refill this server with a bit more connections */
|
||||
pendconn_grab_from_px(s);
|
||||
|
||||
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
|
||||
|
||||
/* get back there in 1 second or 1/20th of the slowstart interval,
|
||||
* whichever is greater, resulting in small 5% steps.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user