An open_entity without a close_entity call is pointless, those can
be resumed to a single call.
Index: trunk/modules/cache/cache_storage.c
===================================================================
--- trunk.orig/modules/cache/cache_storage.c
+++ trunk/modules/cache/cache_storage.c
@@ -40,14 +40,7 @@ apr_status_t cache_recall_entity_headers
cache_handle_t *h, request_rec *r,
const char *urlkey)
{
- apr_status_t rv;
-
- rv = provider->open_entity(h, r, urlkey);
-
- if (rv != OK)
- return rv;
-
- return provider->recall_headers(h, r);
+ return provider->recall_headers(h, r, urlkey);
}
apr_status_t cache_recall_entity_body(cache_request_rec *cache,
Index: trunk/modules/cache/mod_cache.h
===================================================================
--- trunk.orig/modules/cache/mod_cache.h
+++ trunk/modules/cache/mod_cache.h
@@ -213,12 +213,10 @@ typedef struct {
int (*remove_entity) (cache_handle_t *h);
apr_status_t (*store_headers)(cache_handle_t *h, request_rec *r,
cache_info *i);
apr_status_t (*store_body)(cache_handle_t *h, request_rec *r,
apr_bucket_brigade *b);
- apr_status_t (*recall_headers) (cache_handle_t *h, request_rec *r);
+ apr_status_t (*recall_headers) (cache_handle_t *h, request_rec *r, const
char *urlkey);
apr_status_t (*recall_body) (cache_handle_t *h, apr_pool_t *p,
apr_bucket_brigade *bb);
int (*create_entity) (cache_handle_t *h, request_rec *r,
const char *urlkey, apr_off_t len);
- int (*open_entity) (cache_handle_t *h, request_rec *r,
- const char *urlkey);
int (*remove_url) (cache_handle_t *h, apr_pool_t *p);
} cache_provider;
Index: trunk/modules/cache/mod_disk_cache.c
===================================================================
--- trunk.orig/modules/cache/mod_disk_cache.c
+++ trunk/modules/cache/mod_disk_cache.c
@@ -57,7 +57,7 @@ module AP_MODULE_DECLARE_DATA disk_cache
static int remove_entity(cache_handle_t *h);
static apr_status_t store_headers(cache_handle_t *h, request_rec *r,
cache_info *i);
static apr_status_t store_body(cache_handle_t *h, request_rec *r,
apr_bucket_brigade *b);
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r);
+static apr_status_t recall_headers(cache_handle_t *h, request_rec *r, const
char *urlkey);
static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p,
apr_bucket_brigade *bb);
static apr_status_t read_array(request_rec *r, apr_array_header_t* arr,
apr_file_t *file);
@@ -777,9 +777,15 @@ static apr_status_t read_table(cache_han
* @@@: XXX: FIXME: currently the headers are passed thru un-merged.
* Is that okay, or should they be collapsed where possible?
*/
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r)
+static apr_status_t recall_headers(cache_handle_t *h, request_rec *r,
+ const char *urlkey)
{
- disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
+ disk_cache_object_t *dobj;
+
+ if (open_entity(h, r, urlkey) != OK)
+ return DECLINED;
+
+ dobj = (disk_cache_object_t *) h->cache_obj->vobj;
/* This case should not happen... */
if (!dobj->hfd) {
@@ -1203,7 +1209,6 @@ static const cache_provider cache_disk_p
&recall_headers,
&recall_body,
&create_entity,
- &open_entity,
&remove_url,
};
Index: trunk/modules/cache/mod_mem_cache.c
===================================================================
--- trunk.orig/modules/cache/mod_mem_cache.c
+++ trunk/modules/cache/mod_mem_cache.c
@@ -108,7 +108,7 @@ static mem_cache_conf *sconf;
static int remove_entity(cache_handle_t *h);
static apr_status_t store_headers(cache_handle_t *h, request_rec *r,
cache_info *i);
static apr_status_t store_body(cache_handle_t *h, request_rec *r,
apr_bucket_brigade *b);
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r);
+static apr_status_t recall_headers(cache_handle_t *h, request_rec *r, const
char *urlkey);
static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p,
apr_bucket_brigade *bb);
static void cleanup_cache_object(cache_object_t *obj);
@@ -628,10 +628,16 @@ static int remove_url(cache_handle_t *h,
return OK;
}
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r)
+static apr_status_t recall_headers(cache_handle_t *h, request_rec *r,
+ const char *urlkey)
{
int rc;
- mem_cache_object_t *mobj = (mem_cache_object_t*) h->cache_obj->vobj;
+ mem_cache_object_t *mobj;
+
+ if (open_entity(h, r, urlkey) != OK)
+ return DECLINED;
+
+ mobj = (mem_cache_object_t*) h->cache_obj->vobj;
h->req_hdrs = apr_table_make(r->pool, mobj->num_req_hdrs);
h->resp_hdrs = apr_table_make(r->pool, mobj->num_header_out);
@@ -1053,7 +1059,6 @@ static const cache_provider cache_mem_pr
&recall_headers,
&recall_body,
&create_mem_entity,
- &open_entity,
&remove_url,
};
@@ -1065,7 +1070,6 @@ static const cache_provider cache_fd_pro
&recall_headers,
&recall_body,
&create_fd_entity,
- &open_entity,
&remove_url,
};
--