From 5f1ded5629d046124827087c41e765d5362c87cf Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 14 Oct 2020 18:17:03 +0200 Subject: [PATCH] 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. --- src/backend.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend.c b/src/backend.c index 490dc1f..19bce9c 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; -- 1.7.10.4