1
0
mirror of https://github.com/apache/httpd.git synced 2026-01-26 19:01:35 +03:00

Eliminate a cache_handle leak. cache_handle is now allocated out of the

request pool.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90637 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Bill Stoddard
2001-08-24 17:01:21 +00:00
parent 5c53bb308f
commit 3c97baefef
3 changed files with 10 additions and 17 deletions

View File

@@ -156,7 +156,6 @@ int cache_remove_entity(request_rec *r, const char *types, cache_handle *h)
*/
int cache_select_url(request_rec *r, const char *types, char *url)
{
cache_handle *h;
const char *next = types;
const char *type;
apr_status_t rv;
@@ -164,12 +163,13 @@ int cache_select_url(request_rec *r, const char *types, char *url)
&cache_module);
/* go through the cache types till we get a match */
cache->handle = apr_palloc(r->pool, sizeof(cache_handle));
while (next) {
type = ap_cache_tokstr(r->pool, next, &next);
switch ((rv = cache_run_open_entity(&h, type, url))) {
switch ((rv = cache_run_open_entity(cache->handle, type, url))) {
case OK: {
/* cool bananas! */
cache->handle = h;
/*** loop through returned entities */
/*** do freshness calculation here */
cache->fresh = 1;
@@ -182,10 +182,12 @@ int cache_select_url(request_rec *r, const char *types, char *url)
}
default: {
/* oo-er! an error */
cache->handle = NULL;
return rv;
}
}
}
cache->handle = NULL;
return DECLINED;
}
@@ -245,8 +247,8 @@ APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, create_entity,
(cache_handle **hp, const char *type,
char *url, apr_size_t len),(hp,type,url,len),DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, open_entity,
(cache_handle **hp, const char *type,
char *url),(hp,type,url),DECLINED)
(cache_handle *h, const char *type,
char *url),(h,type,url),DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(cache, CACHE, int, remove_url,
(const char *type, char *url),(type,url),OK,DECLINED)
#if 0

View File

@@ -240,7 +240,7 @@ APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, create_entity,
(cache_handle **hp, const char *type,
char *url, apr_size_t len))
APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, open_entity,
(cache_handle **hp, const char *type,
(cache_handle *h, const char *type,
char *url))
APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, remove_url,
(const char *type, char *url))

View File

@@ -263,10 +263,9 @@ static int create_entity(cache_handle **hp, const char *type, char *key, apr_siz
return OK;
}
static int open_entity(cache_handle **hp, const char *type, char *key)
static int open_entity(cache_handle *h, const char *type, char *key)
{
cache_object_t *obj;
cache_handle *h;
/* Look up entity keyed to 'url' */
if (strcasecmp(type, "mem")) {
@@ -284,13 +283,7 @@ static int open_entity(cache_handle **hp, const char *type, char *key)
return DECLINED;
}
/* Allocate the cache_handle and initialize it */
h = malloc(sizeof(cache_handle));
*hp = h;
if (!h) {
/* handle the error */
return DECLINED;
}
/* Initialize the cache_handle */
h->read_body = &read_body;
h->read_headers = &read_headers;
h->write_body = &write_body;
@@ -319,8 +312,6 @@ static int remove_entity(cache_handle *h)
/* Reinit the cache_handle fields? */
h->cache_obj = NULL;
/* The caller should free the cache_handle ? */
free(h);
return OK;
}