]> granicus.if.org Git - apache/commitdiff
Handle the case where a brigade might have buckets following the eos
authorGraham Leggett <minfrin@apache.org>
Mon, 13 Sep 2010 22:35:51 +0000 (22:35 +0000)
committerGraham Leggett <minfrin@apache.org>
Mon, 13 Sep 2010 22:35:51 +0000 (22:35 +0000)
bucket. In this case the cache provider passes all buckets through as
is once the cached entry is marked as done.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@996713 13f79535-47bb-0310-9956-ffa450edef68

modules/cache/mod_disk_cache.c
modules/cache/mod_disk_cache.h

index 62511b0e169a3329565e71a0d87d79641d413e1d..2cead23bb68af31cd7f79500a3b98097359a03a8 100644 (file)
@@ -1051,13 +1051,21 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r,
 
         e = APR_BRIGADE_FIRST(in);
 
+        /* are we done completely? if so, pass any trailing buckets right through */
+        if (dobj->done) {
+            APR_BUCKET_REMOVE(e);
+            APR_BRIGADE_INSERT_TAIL(out, e);
+            continue;
+        }
+
         /* have we seen eos yet? */
         if (APR_BUCKET_IS_EOS(e)) {
             seen_eos = 1;
+            dobj->done = 1;
             APR_BUCKET_REMOVE(e);
             APR_BRIGADE_CONCAT(out, dobj->bb);
             APR_BRIGADE_INSERT_TAIL(out, e);
-            continue;
+            break;
         }
 
         /* honour flush buckets, we'll get called again */
index d962d9d5eb6ae48d58ac8a75b3013161833e90a4..bfafff91f6baf6594f482bb62a2dc22f2c95560c 100644 (file)
@@ -73,6 +73,7 @@ typedef struct disk_cache_object {
     apr_bucket_brigade *bb;      /* Set aside brigade */
     apr_off_t offset;            /* Max size to set aside */
     apr_time_t timeout;          /* Max time to set aside */
+    int done;                    /* Is the attempt to cache complete? */
 } disk_cache_object_t;