]> granicus.if.org Git - apache/commitdiff
Move min,smax and hmax params to worker, so they can be set
authorWilliam A. Rowe Jr <wrowe@apache.org>
Wed, 11 Aug 2004 21:27:57 +0000 (21:27 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Wed, 11 Aug 2004 21:27:57 +0000 (21:27 +0000)
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

modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h

index 5874c0dbeb497f2a0917d9732dc55b74c7d05992..26494636467b85cdc2331f00b43abec432b30950 100644 (file)
@@ -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;
 }
 
index e5b9413280e1b9328a98e94d16d118997dd909dd..4a79b9779889bc198e0f5eb7ffea41ce5c3664ef 100644 (file)
@@ -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;