diff options
author | Graham Leggett <minfrin@apache.org> | 2010-09-14 00:35:51 +0200 |
---|---|---|
committer | Graham Leggett <minfrin@apache.org> | 2010-09-14 00:35:51 +0200 |
commit | 721d19a58b4469d7844b64f67ff57b6b9664a66a (patch) | |
tree | 154368c24b7ace4f12a68279a4d5550d168a2669 | |
parent | Update transformations. (diff) | |
download | apache2-721d19a58b4469d7844b64f67ff57b6b9664a66a.tar.xz apache2-721d19a58b4469d7844b64f67ff57b6b9664a66a.zip |
Handle the case where a brigade might have buckets following the eos
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
Diffstat (limited to '')
-rw-r--r-- | modules/cache/mod_disk_cache.c | 10 | ||||
-rw-r--r-- | modules/cache/mod_disk_cache.h | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/modules/cache/mod_disk_cache.c b/modules/cache/mod_disk_cache.c index 62511b0e16..2cead23bb6 100644 --- a/modules/cache/mod_disk_cache.c +++ b/modules/cache/mod_disk_cache.c @@ -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 */ diff --git a/modules/cache/mod_disk_cache.h b/modules/cache/mod_disk_cache.h index d962d9d5eb..bfafff91f6 100644 --- a/modules/cache/mod_disk_cache.h +++ b/modules/cache/mod_disk_cache.h @@ -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; |