From: Ruediger Pluem Date: Tue, 11 Sep 2007 06:38:16 +0000 (+0000) Subject: * Do not reset lbstatus, lbfactor and lbset if the shared proxy_worker_stat X-Git-Tag: 2.3.0~1430 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5579888fa519b94eeaec2919f1d890e690fc1cfc;p=apache * Do not reset lbstatus, lbfactor and lbset if the shared proxy_worker_stat structure for a worker is already initialized by the same or another process. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@574485 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index 9d9c1fc560..6258509505 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -19,6 +19,7 @@ #define CORE_PRIVATE #include "mod_proxy.h" +#include "scoreboard.h" #include "ap_mpm.h" #include "apr_version.h" #include "apr_hooks.h" @@ -86,22 +87,37 @@ static int init_balancer_members(proxy_server_conf *conf, server_rec *s, { int i; proxy_worker *workers; + int worker_is_initialized; + proxy_worker_stat *slot; workers = (proxy_worker *)balancer->workers->elts; for (i = 0; i < balancer->workers->nelts; i++) { + worker_is_initialized = PROXY_WORKER_IS_INITIALIZED(workers); + if (!worker_is_initialized) { + /* + * If the worker is not initialized check whether its scoreboard + * slot is already initialized. + */ + slot = (proxy_worker_stat *) ap_get_scoreboard_lb(workers->id); + if (slot) { + worker_is_initialized = slot->status & PROXY_WORKER_INITIALIZED; + } + else { + worker_is_initialized = 0; + } + } ap_proxy_initialize_worker_share(conf, workers, s); ap_proxy_initialize_worker(workers, s); + if (!worker_is_initialized) { + /* Set to the original configuration */ + workers->s->lbstatus = workers->s->lbfactor = + (workers->lbfactor ? workers->lbfactor : 1); + workers->s->lbset = workers->lbset; + } ++workers; } - workers = (proxy_worker *)balancer->workers->elts; - for (i = 0; i < balancer->workers->nelts; i++) { - /* Set to the original configuration */ - workers[i].s->lbstatus = workers[i].s->lbfactor = - (workers[i].lbfactor ? workers[i].lbfactor : 1); - workers[i].s->lbset = workers[i].lbset; - } /* Set default number of attempts to the number of * workers. */