From: willy tarreau Date: Thu, 23 Mar 2006 10:27:02 +0000 (+0100) Subject: While fixing the backup server round-robin "feature", a new bug was introduced X-Git-Tag: v1.2.10.1~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=72e583d030bf3967fae62d7a545844d3e95105e2;p=thirdparty%2Fhaproxy.git While fixing the backup server round-robin "feature", a new bug was introduced which could miss some backup servers. --- diff --git a/haproxy.c b/haproxy.c index 67dce3dd3d..d03ec1f4e4 100644 --- a/haproxy.c +++ b/haproxy.c @@ -1787,17 +1787,21 @@ static inline void session_free(struct session *s) { */ static inline struct server *find_server(struct proxy *px) { struct server *srv = px->cursrv; + struct server *end; int ignore_backup = 1; do { + if (srv == NULL) + srv = px->srv; + end = srv; do { - if (srv == NULL) - srv = px->srv; if (srv->state & SRV_RUNNING && !((srv->state & SRV_BACKUP) && ignore_backup)) return srv; srv = srv->next; - } while (srv != px->cursrv); + if (srv == NULL) + srv = px->srv; + } while (srv != end); /* By default, we look for the first backup server if all others are * DOWN. But in some cases, it may be desirable to load-balance across