]> granicus.if.org Git - apache/commitdiff
Always use prive connection pool for allocation, and call
authorMladen Turk <mturk@apache.org>
Mon, 13 Sep 2004 11:13:28 +0000 (11:13 +0000)
committerMladen Turk <mturk@apache.org>
Mon, 13 Sep 2004 11:13:28 +0000 (11:13 +0000)
apr_pool_clear when the connection is closed on recycle, so
that we don't leak on persistent connections.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105108 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy.h
modules/proxy/proxy_ajp.c
modules/proxy/proxy_http.c
modules/proxy/proxy_util.c

index 24fb7c1511a5a33b07392e7d450ee8c684e7ac65..53ad4ae67e9224e1395308f21c685c4a473c5dbf 100644 (file)
@@ -495,7 +495,6 @@ PROXY_DECLARE(int) ap_proxy_post_request(proxy_worker *worker,
  * @param conf    current proxy server configuration
  * @param worker  worker used for processing request
  * @param conn    proxy connection struct
- * @param ppool   long living memory pool
  * @param uri     processed uri
  * @param url     request url
  * @param proxyname are we connecting directly or via s proxy
@@ -508,7 +507,6 @@ PROXY_DECLARE(int) ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
                                                  proxy_server_conf *conf,
                                                  proxy_worker *worker,
                                                  proxy_conn_rec *conn,
-                                                 apr_pool_t *ppool,
                                                  apr_uri_t *uri,
                                                  char **url,
                                                  const char *proxyname,
index 69a525ef8c52eda136ff8307b8e70c074c02928e..ccf617b4caf8b2ebdb577697f96ea1f256f41a03 100644 (file)
@@ -418,7 +418,7 @@ int ap_proxy_ajp_handler(request_rec *r, proxy_worker *worker,
     backend->close_on_recycle = 0;
 
     /* Step One: Determine Who To Connect To */
-    status = ap_proxy_determine_connection(p, r, conf, worker, backend, c->pool,
+    status = ap_proxy_determine_connection(p, r, conf, worker, backend,
                                            uri, &url, proxyname, proxyport,
                                            server_portstr,
                                            sizeof(server_portstr));
index d2828fa244d40ef0425be684b8b6bf012c2348b5..e112e7e25331b8d1651901f87a7f5d693ada5269 100644 (file)
@@ -1219,7 +1219,7 @@ int ap_proxy_http_handler(request_rec *r, proxy_worker *worker,
 
     /* Step One: Determine Who To Connect To */
     if ((status = ap_proxy_determine_connection(p, r, conf, worker, backend,
-                                                c->pool, uri, &url, proxyname,
+                                                uri, &url, proxyname,
                                                 proxyport, server_portstr,
                                                 sizeof(server_portstr))) != OK)
         goto cleanup;
index c2f87680f018f2a5eddf4262c19804a2792bf1d2..397d9225c7f4331a4271859e26d0bf0404b35a30 100644 (file)
@@ -1321,9 +1321,11 @@ static apr_status_t connection_cleanup(void *theconn)
 
     /* deterimine if the connection need to be closed */
     if (conn->close_on_recycle || conn->close) {
-        if (conn->sock)
-            apr_socket_close(conn->sock);
-        conn->sock = NULL;
+        apr_pool_t *p = conn->pool;
+        apr_pool_clear(conn->pool);
+        memset(conn, 0, sizeof(proxy_conn_rec));
+        conn->pool = p;
+        conn->worker = worker;
     }
 #if APR_HAS_THREADS
     if (worker->hmax && worker->cp->res) {
@@ -1352,7 +1354,7 @@ static apr_status_t connection_constructor(void **resource, void *params,
      * when disconnecting from backend.
      */
     apr_pool_create(&ctx, pool);
-    conn = apr_pcalloc(ctx, sizeof(proxy_conn_rec));
+    conn = apr_pcalloc(pool, sizeof(proxy_conn_rec));
 
     conn->pool   = ctx;
     conn->worker = worker;
@@ -1534,7 +1536,6 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
                               proxy_server_conf *conf,
                               proxy_worker *worker,
                               proxy_conn_rec *conn,
-                              apr_pool_t *ppool,
                               apr_uri_t *uri,
                               char **url,
                               const char *proxyname,
@@ -1568,10 +1569,10 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
      */
     /* are we connecting directly, or via a proxy? */
     if (proxyname) {
-        conn->hostname = apr_pstrdup(ppool, proxyname);
+        conn->hostname = apr_pstrdup(conn->pool, proxyname);
         conn->port = proxyport;
     } else {
-        conn->hostname = apr_pstrdup(ppool, uri->hostname);
+        conn->hostname = apr_pstrdup(conn->pool, uri->hostname);
         conn->port = uri->port;
         *url = apr_pstrcat(p, uri->path, uri->query ? "?" : "",
                            uri->query ? uri->query : "",
@@ -1585,7 +1586,7 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
         err = apr_sockaddr_info_get(&(conn->addr),
                                     conn->hostname, APR_UNSPEC,
                                     conn->port, 0,
-                                    p);
+                                    conn->pool);
     }
     else if (!worker->cp->addr) {
         /* Worker can have the single constant backend adress.