From: Amaury Denoyelle Date: Wed, 14 Oct 2020 16:17:03 +0000 (+0200) Subject: BUG/MINOR: connection: fix loop iter on connection takeover X-Git-Tag: v2.3-dev7~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f1ded5629d046124827087c41e765d5362c87cf;p=thirdparty%2Fhaproxy.git BUG/MINOR: connection: fix loop iter on connection takeover The loop always missed one iteration due to the incrementation done on the for check. Move the incrementation on the loop last statement to fix this behaviour. This bug has a very limited impact, not at all visible to the user, but could be backported to 2.2. --- diff --git a/src/backend.c b/src/backend.c index 490dc1f282..19bce9c198 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1154,7 +1154,8 @@ static struct connection *conn_backend_get(struct server *srv, int is_safe) if (stop >= global.nbthread) stop = 0; - for (i = stop; !found && (i = ((i + 1 == global.nbthread) ? 0 : i + 1)) != stop;) { + i = stop; + do { struct mt_list *elt1, elt2; if (!srv->curr_idle_thr[i] || i == tid) @@ -1183,7 +1184,7 @@ static struct connection *conn_backend_get(struct server *srv, int is_safe) } } HA_SPIN_UNLOCK(OTHER_LOCK, &idle_conns[i].takeover_lock); - } + } while (!found && (i = (i + 1 == global.nbthread) ? 0 : i + 1) != stop); if (!found) conn = NULL;