From: Mladen Turk Date: Mon, 13 Sep 2004 11:13:28 +0000 (+0000) Subject: Always use prive connection pool for allocation, and call X-Git-Tag: 2.1.1~275 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5cc48386c4e5e9fb96050d48f65a30fc740c09f8;p=apache Always use prive connection pool for allocation, and call 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 --- diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 24fb7c1511..53ad4ae67e 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -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, diff --git a/modules/proxy/proxy_ajp.c b/modules/proxy/proxy_ajp.c index 69a525ef8c..ccf617b4ca 100644 --- a/modules/proxy/proxy_ajp.c +++ b/modules/proxy/proxy_ajp.c @@ -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)); diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c index d2828fa244..e112e7e253 100644 --- a/modules/proxy/proxy_http.c +++ b/modules/proxy/proxy_http.c @@ -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; diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index c2f87680f0..397d9225c7 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -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.