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,
 };
 

--

Reply via email to