From: Jim Jagielski Date: Wed, 22 Oct 2008 19:13:57 +0000 (+0000) Subject: Remove potential for memory leak... allocate on this X-Git-Tag: 2.3.0~241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd7a438a43b5625ad566456cb61cc1f7512dd916;p=thirdparty%2Fapache%2Fhttpd.git Remove potential for memory leak... allocate on this 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 --- diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c index 74862637f18..2ae80bde66b 100644 --- a/modules/proxy/mod_proxy_http.c +++ b/modules/proxy/mod_proxy_http.c @@ -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? */