]> git.kaiwu.me - nginx.git/commitdiff
Merge of r4992: off-by-one with 32/64 upstream backup servers.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 11 Feb 2013 14:56:14 +0000 (14:56 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 11 Feb 2013 14:56:14 +0000 (14:56 +0000)
Fixed off-by-one during upstream state resetting when switching to
backup servers if there were exactly 32 (64 on 64-bit platforms)
backup servers configured.

Based on patch by Thomas Chen (ticket #257).

src/http/modules/ngx_http_upstream_least_conn_module.c
src/http/ngx_http_upstream_round_robin.c

index 21156ae1aefbfb9bf6a6827b109a69419314299d..bd2f1bc9e7f40b2ca95317eea540279525c70948 100644 (file)
@@ -313,7 +313,9 @@ failed:
         lcp->rrp.peers = peers->next;
         pc->tries = lcp->rrp.peers->number;
 
-        n = lcp->rrp.peers->number / (8 * sizeof(uintptr_t)) + 1;
+        n = (lcp->rrp.peers->number + (8 * sizeof(uintptr_t) - 1))
+                / (8 * sizeof(uintptr_t));
+
         for (i = 0; i < n; i++) {
              lcp->rrp.tried[i] = 0;
         }
index 4b78cffd84004add33919a79f3ffe8dc69f3c722..61dce69cb3ed0ecb7f2cac1949c484e1662558f5 100644 (file)
@@ -474,7 +474,9 @@ failed:
         rrp->peers = peers->next;
         pc->tries = rrp->peers->number;
 
-        n = rrp->peers->number / (8 * sizeof(uintptr_t)) + 1;
+        n = (rrp->peers->number + (8 * sizeof(uintptr_t) - 1))
+                / (8 * sizeof(uintptr_t));
+
         for (i = 0; i < n; i++) {
              rrp->tried[i] = 0;
         }