Commit c68d2bd7 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

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
parent 3e942d60
Loading
Loading
Loading
Loading
+7 −17
Changes for modules/proxy/mod_proxy_http.c: 7 added lines, 17 removed lines.
Original line number Diff line number Diff line
@@ -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? */