]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Remove potential for memory leak... allocate on this
authorJim Jagielski <jim@apache.org>
Wed, 22 Oct 2008 19:13:57 +0000 (19:13 +0000)
committerJim Jagielski <jim@apache.org>
Wed, 22 Oct 2008 19:13:57 +0000 (19:13 +0000)
request which is now viable due to connection pooling.

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

modules/proxy/mod_proxy_http.c

index 74862637f18bc4312052383857e99e67fa1429e7..2ae80bde66bcc29766501079e378357f4ecc6a51 100644 (file)
@@ -1869,23 +1869,13 @@ static int proxy_http_handler(request_rec *r, proxy_worker *worker,
     const char *u;
     proxy_conn_rec *backend = NULL;
     int is_ssl = 0;
-
-    /* Note: Memory pool allocation.
-     * A downstream keepalive connection is always connected to the existence
-     * (or not) of an upstream keepalive connection. If this is not done then
-     * load balancing against multiple backend servers breaks (one backend
-     * server ends up taking 100% of the load), and the risk is run of
-     * downstream keepalive connections being kept open unnecessarily. This
-     * keeps webservers busy and ties up resources.
-     *
-     * As a result, we allocate all sockets out of the upstream connection
-     * pool, and when we want to reuse a socket, we check first whether the
-     * connection ID of the current upstream connection is the same as that
-     * of the connection when the socket was opened.
-     */
-    apr_pool_t *p = r->connection->pool;
     conn_rec *c = r->connection;
-    apr_uri_t *uri = apr_palloc(r->connection->pool, sizeof(*uri));
+    /*
+     * Use a shorter-lived pool to reduce memory usage
+     * and avoid a memory leak
+     */
+    apr_pool_t *p = r->pool;
+    apr_uri_t *uri = apr_palloc(p, sizeof(*uri));
 
     /* find the scheme */
     u = strchr(url, ':');
@@ -1893,7 +1883,7 @@ static int proxy_http_handler(request_rec *r, proxy_worker *worker,
        return DECLINED;
     if ((u - url) > 14)
         return HTTP_BAD_REQUEST;
-    scheme = apr_pstrndup(c->pool, url, u - url);
+    scheme = apr_pstrndup(p, url, u - url);
     /* scheme is lowercase */
     ap_str_tolower(scheme);
     /* is it for us? */