From: Willy Tarreau Date: Mon, 25 Jul 2011 09:16:24 +0000 (+0200) Subject: [BUG] proxy: peers must only be stopped once, not upon every call to maintain_proxies X-Git-Tag: v1.5-dev8~168 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bbe11b1e3c02fb2ddf4932c6b7308588359700c7;p=thirdparty%2Fhaproxy.git [BUG] proxy: peers must only be stopped once, not upon every call to maintain_proxies Peers were stopped on every call to maintain_proxies when stopping=1, while they should only be stopped once upon call to soft_stop(). This bug has little impact, mostly increased CPU usage. It's not needed to backport it. --- diff --git a/src/proxy.c b/src/proxy.c index bd639fa413..17063a65f9 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -518,8 +518,6 @@ void maintain_proxies(int *next) } if (stopping) { - struct peers *prs; - p = proxy; while (p) { if (p->state != PR_STSTOPPED) { @@ -540,13 +538,6 @@ void maintain_proxies(int *next) } p = p->next; } - - prs = peers; - while (prs) { - stop_proxy((struct proxy *)prs->peers_fe); - prs = prs->next; - } - } return; } @@ -560,6 +551,7 @@ void maintain_proxies(int *next) void soft_stop(void) { struct proxy *p; + struct peers *prs; stopping = 1; p = proxy; @@ -575,6 +567,12 @@ void soft_stop(void) p = p->next; } + + prs = peers; + while (prs) { + stop_proxy((struct proxy *)prs->peers_fe); + prs = prs->next; + } /* signal zero is used to broadcast the "stopping" event */ signal_handler(0); }