From: Jim Jagielski Date: Thu, 10 Feb 2011 13:29:53 +0000 (+0000) Subject: move function... X-Git-Tag: 2.3.11~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d0800cd286d1eaadfe133e9c98e520c10de3b86;p=thirdparty%2Fapache%2Fhttpd.git move function... git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1069381 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index f4c6915d581..4b65c6657f4 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -1327,63 +1327,6 @@ static void balancer_child_init(apr_pool_t *p, server_rec *s) } -PROXY_DECLARE(apr_status_t) ap_proxy_update_members(proxy_balancer *b, server_rec *s, - proxy_server_conf *conf) -{ - proxy_worker **workers; - int i; - int index; - proxy_worker_shared *shm; - if (b->s->wupdated <= b->wupdated) - return APR_SUCCESS; - /* - * Look thru the list of workers in shm - * and see which one(s) we are lacking... - * again, the cast to unsigned int is safe - * since our upper limit is always max_workers - * which is int. - */ - for (index = 0; index < b->max_workers; index++) { - int found; - apr_status_t rv; - if ((rv = storage->dptr(b->slot, (unsigned int)index, (void *)&shm)) != APR_SUCCESS) { - ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "worker slotmem_dptr failed"); - return APR_EGENERAL; - } - /* account for possible "holes" in the slotmem - * (eg: slots 0-2 are used, but 3 isn't, but 4-5 is) - */ - if (!shm->hash) - continue; - found = 0; - workers = (proxy_worker **)b->workers->elts; - for (i = 0; i < b->workers->nelts; i++, workers++) { - proxy_worker *worker = *workers; - if (worker->hash == shm->hash) { - found = 1; - break; - } - } - if (!found) { - proxy_worker **runtime; - runtime = apr_array_push(b->workers); - *runtime = apr_palloc(conf->pool, sizeof(proxy_worker)); - (*runtime)->hash = shm->hash; - (*runtime)->context = NULL; - (*runtime)->cp = NULL; - (*runtime)->balancer = b; - (*runtime)->s = shm; - (*runtime)->tmutex = NULL; - if ((rv = ap_proxy_initialize_worker(*runtime, s, conf->pool)) != APR_SUCCESS) { - ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "Cannot init worker"); - return rv; - } - } - } - b->wupdated = b->s->wupdated; - return APR_SUCCESS; -} - static void ap_proxy_balancer_register_hook(apr_pool_t *p) { /* Only the mpm_winnt has child init hook handler. diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 89abd248d5e..e1d135c3d8a 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -2933,3 +2933,62 @@ PROXY_DECLARE(char *) ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w) return ret; } +PROXY_DECLARE(apr_status_t) ap_proxy_update_members(proxy_balancer *b, server_rec *s, + proxy_server_conf *conf) +{ + proxy_worker **workers; + int i; + int index; + proxy_worker_shared *shm; + ap_slotmem_provider_t *storage = b->storage; + + if (b->s->wupdated <= b->wupdated) + return APR_SUCCESS; + /* + * Look thru the list of workers in shm + * and see which one(s) we are lacking... + * again, the cast to unsigned int is safe + * since our upper limit is always max_workers + * which is int. + */ + for (index = 0; index < b->max_workers; index++) { + int found; + apr_status_t rv; + if ((rv = storage->dptr(b->slot, (unsigned int)index, (void *)&shm)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "worker slotmem_dptr failed"); + return APR_EGENERAL; + } + /* account for possible "holes" in the slotmem + * (eg: slots 0-2 are used, but 3 isn't, but 4-5 is) + */ + if (!shm->hash) + continue; + found = 0; + workers = (proxy_worker **)b->workers->elts; + for (i = 0; i < b->workers->nelts; i++, workers++) { + proxy_worker *worker = *workers; + if (worker->hash == shm->hash) { + found = 1; + break; + } + } + if (!found) { + proxy_worker **runtime; + runtime = apr_array_push(b->workers); + *runtime = apr_palloc(conf->pool, sizeof(proxy_worker)); + (*runtime)->hash = shm->hash; + (*runtime)->context = NULL; + (*runtime)->cp = NULL; + (*runtime)->balancer = b; + (*runtime)->s = shm; + (*runtime)->tmutex = NULL; + if ((rv = ap_proxy_initialize_worker(*runtime, s, conf->pool)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "Cannot init worker"); + return rv; + } + } + } + b->wupdated = b->s->wupdated; + return APR_SUCCESS; +} +