Mercurial > hg > nginx
changeset 1419:79f033a89dd4
add guard code to prevent endless loop
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 24 Aug 2007 15:58:13 +0000 |
parents | acb1f441e7b2 |
children | 24778e7450af |
files | src/http/ngx_http_upstream_round_robin.c |
diffstat | 1 files changed, 21 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_upstream_round_robin.c Fri Aug 24 15:30:35 2007 +0000 +++ b/src/http/ngx_http_upstream_round_robin.c Fri Aug 24 15:58:13 2007 +0000 @@ -303,6 +303,8 @@ /* it's a first try - get a current peer */ + i = pc->tries; + for ( ;; ) { rrp->current = ngx_http_upstream_get_peer(rrp->peers); @@ -339,16 +341,24 @@ pc->tries--; } - if (pc->tries) { - continue; + if (pc->tries == 0) { + goto failed; } - goto failed; + if (--i == 0) { + ngx_log_error(NGX_LOG_ALERT, pc->log, 0, + "round robin upstream stuck on %ui tries", + pc->tries); + goto failed; + } } peer->current_weight--; } else { + + i = pc->tries; + for ( ;; ) { n = rrp->current / (8 * sizeof(uintptr_t)); m = (uintptr_t) 1 << rrp->current % (8 * sizeof(uintptr_t)); @@ -385,11 +395,16 @@ rrp->current = 0; } - if (pc->tries) { - continue; + if (pc->tries == 0) { + goto failed; } - goto failed; + if (--i == 0) { + ngx_log_error(NGX_LOG_ALERT, pc->log, 0, + "round robin upstream stuck on %ui tries", + pc->tries); + goto failed; + } } peer->current_weight--;