From: William A. Rowe Jr Date: Wed, 11 Aug 2004 21:27:57 +0000 (+0000) Subject: Move min,smax and hmax params to worker, so they can be set X-Git-Tag: post_ajp_proxy~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e881f5cc729f26984b11f02ce04120ba0f1e53d9;p=apache Move min,smax and hmax params to worker, so they can be set before the connection pool is created Added init_conn_pool to worker. Connection pool will either use reslist (if thread number > 1) or single connection. Submitted by: mturk git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@104569 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 5874c0dbeb..2649463646 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -20,6 +20,7 @@ #include "mod_core.h" #include "apr_optional.h" +#include "ap_mpm.h" #if (MODULE_MAGIC_NUMBER_MAJOR > 20020903) #include "mod_ssl.h" @@ -1366,6 +1367,39 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p, return NULL; } +static void init_conn_pool(apr_pool_t *p, proxy_worker *worker) +{ + apr_pool_t *pool; + proxy_conn_pool *cp; + + /* Create a connection pool's subpool */ + apr_pool_create(&pool, p); + cp = (proxy_conn_pool *)apr_pcalloc(pool, sizeof(proxy_conn_pool)); + cp->pool = pool; +#if APR_HAS_THREADS + { + int mpm_threads; + ap_mpm_query(AP_MPMQ_MAX_THREADS, &mpm_threads); + if (mpm_threads > 1) { + /* Set hard max to no more then mpm_threads */ + if (worker->hmax == 0 || worker->hmax > mpm_threads) + worker->hmax = mpm_threads; + if (worker->smax == 0 || worker->smax > worker->hmax) + worker->smax = worker->hmax; + /* Set min to be lower then smax */ + if (worker->min > worker->smax) + worker->min = worker->smax; + } + else { + /* This will supress the apr_reslist creation */ + worker->min = worker->smax = worker->hmax = 0; + } + } +#endif + + worker->cp = cp; +} + PROXY_DECLARE(const char *) ap_proxy_add_worker(proxy_worker **worker, apr_pool_t *p, proxy_server_conf *conf, @@ -1399,6 +1433,8 @@ PROXY_DECLARE(const char *) ap_proxy_add_worker(proxy_worker **worker, port = apr_uri_port_of_scheme((*worker)->scheme); (*worker)->port = port; + init_conn_pool(p, *worker); + return NULL; } diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index e5b9413280..4a79b97798 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -202,9 +202,6 @@ typedef struct { typedef struct { apr_pool_t *pool; /* The pool used in constructor and destructor calls */ apr_sockaddr_t *addr; /* Preparsed remote address info */ - int min; /* Desired minimum number of available connections */ - int smax; /* Soft maximum on the total number of connections */ - int hmax; /* Hard maximum on the total number of connections */ #if APR_HAS_THREADS apr_reslist_t *res; /* Connection resource list */ #else @@ -223,6 +220,9 @@ typedef struct { const char *scheme; /* scheme to use ajp|http|https */ const char *hostname; /* remote backend address */ apr_port_t port; + int min; /* Desired minimum number of available connections */ + int smax; /* Soft maximum on the total number of connections */ + int hmax; /* Hard maximum on the total number of connections */ proxy_conn_pool *cp; /* Connection pool to use */ void *opaque; /* per scheme worker data */ } proxy_worker;