]> granicus.if.org Git - apache/commitdiff
cleanup some code paths
authorBill Stoddard <stoddard@apache.org>
Tue, 12 Mar 2002 22:26:07 +0000 (22:26 +0000)
committerBill Stoddard <stoddard@apache.org>
Tue, 12 Mar 2002 22:26:07 +0000 (22:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93880 13f79535-47bb-0310-9956-ffa450edef68

modules/experimental/mod_mem_cache.c

index bac583cf2fba87a2419ccf69e8ae6295260815c4..eb1228fd7a9e7a6893fe8f918e0fed24cd63eb48 100644 (file)
@@ -320,6 +320,8 @@ static int create_entity(cache_handle_t *h, request_rec *r,
     /* Reference mem_cache_object_t out of cache_object_t */
     obj->vobj = mobj;
     mobj->m_len = len;
+    obj->complete = 0;
+    obj->refcount = 1;
 
     /* Place the cache_object_t into the hash table.
      * Note: Perhaps we should wait to put the object in the
@@ -343,14 +345,6 @@ static int create_entity(cache_handle_t *h, request_rec *r,
         apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), obj);
         sconf->object_cnt++;
         sconf->cache_size += len;
-        /* Call a cleanup at the end of the request to garbage collect
-         * a partially completed (aborted) cache update.
-         */
-        obj->complete = 0;
-        obj->refcount = 1;
-        obj->cleanup = 1;
-        apr_pool_cleanup_register(r->pool, obj, decrement_refcount, 
-                                  apr_pool_cleanup_null);
     }
     if (sconf->lock) {
         apr_thread_mutex_unlock(sconf->lock);
@@ -365,6 +359,13 @@ static int create_entity(cache_handle_t *h, request_rec *r,
         return DECLINED;
     }
 
+    /* Set the cleanup flag and register the cleanup to cleanup
+     * the cache_object_t if the cache load is aborted.
+     */
+    obj->cleanup = 1;
+    apr_pool_cleanup_register(r->pool, obj, decrement_refcount, 
+                              apr_pool_cleanup_null);
+
     /* Populate the cache handle */
     h->cache_obj = obj;
     h->read_body = &read_body;
@@ -434,10 +435,8 @@ static int remove_entity(cache_handle_t *h)
         apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), NULL);
         sconf->object_cnt--;
         sconf->cache_size -= mobj->m_len;
-        if (obj->refcount) {
-            obj->cleanup = 1;
-        }
-        else {
+        obj->cleanup = 1;
+        if (!obj->refcount) {
             cleanup_cache_object(obj);
         }
         h->cache_obj = NULL;
@@ -531,10 +530,8 @@ static int remove_url(const char *type, const char *key)
         apr_hash_set(sconf->cacheht, key, APR_HASH_KEY_STRING, NULL);
         sconf->object_cnt--;
         sconf->cache_size -= mobj->m_len;
-        if (obj->refcount) {
-            obj->cleanup = 1;
-        }
-        else {
+        obj->cleanup = 1;
+        if (!obj->refcount) {
             cleanup_cache_object(obj);
         }
     }