BUG/MEDIUM: threads/server: Fix deadlock in srv_set_stopping/srv_set_admin_flag

Because of a typo (HA_SPIN_LOCK instead of HA_SPIN_UNLOCK), there is a deadlock
in srv_set_stopping and srv_set_admin_flag when there is at least one trackers.

This patch must be backported in 1.8.
This commit is contained in:
Christopher Faulet 2018-01-24 21:49:41 +01:00 committed by Willy Tarreau
parent c20d737338
commit 8d01fd6b3c

View File

@ -976,7 +976,7 @@ void srv_set_stopping(struct server *s, const char *reason, struct check *check)
for (srv = s->trackers; srv; srv = srv->tracknext) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srv_set_stopping(srv, NULL, NULL);
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
}
@ -1019,7 +1019,7 @@ void srv_set_admin_flag(struct server *s, enum srv_admin mode, const char *cause
for (srv = s->trackers; srv; srv = srv->tracknext) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srv_set_admin_flag(srv, mode, cause);
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
}