https://bz.apache.org/bugzilla/show_bug.cgi?id=59864
--- Comment #4 from Ruediger Pluem <[email protected]> --- Sorry white space issue with the first post of the patch: Index: modules/proxy/mod_proxy_balancer.c =================================================================== --- modules/proxy/mod_proxy_balancer.c (revision 1752793) +++ modules/proxy/mod_proxy_balancer.c (working copy) @@ -212,7 +212,8 @@ /* Find the worker that has the 'route' defined */ static proxy_worker *find_route_worker(proxy_balancer *balancer, - const char *route, request_rec *r) + const char *route, request_rec *r, + int recursion) { int i; int checking_standby; @@ -249,10 +250,15 @@ * This enables to safely remove the member from the * balancer. Of course you will need some kind of * session replication between those two remote. + * Also check that we haven't gone thru all the + * balancer members by means of redirects. + * This should avoid redirect cycles. */ - if (*worker->s->redirect) { + if ((*worker->s->redirect) + && (recursion < balancer->workers->nelts)) { proxy_worker *rworker = NULL; - rworker = find_route_worker(balancer, worker->s->redirect, r); + rworker = find_route_worker(balancer, worker->s->redirect, + r, recursion + 1); /* Check if the redirect worker is usable */ if (rworker && !PROXY_WORKER_IS_USABLE(rworker)) { /* @@ -315,7 +321,7 @@ /* We have a route in path or in cookie * Find the worker that has this route defined. */ - worker = find_route_worker(balancer, *route, r); + worker = find_route_worker(balancer, *route, r, 1); if (worker && strcmp(*route, worker->s->route)) { /* * Notice that the route of the worker chosen is different from -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
