diff options
| author | Stefan Fritsch <sf@sfritsch.de> | 2011-12-27 19:42:22 +0100 |
|---|---|---|
| committer | Stefan Fritsch <sf@sfritsch.de> | 2011-12-27 19:42:22 +0100 |
| commit | 0268977037115539ad65a26e858aa0df8d18cd13 (patch) | |
| tree | f761b541b04d08b75e32efc6c293111c61a8b79c /modules/cache | |
| parent | 9e615cb6aa4afcee97f8a1646e5a586261a7b81f (diff) | |
| download | apache2-0268977037115539ad65a26e858aa0df8d18cd13.tar.gz | |
Upstream tarball 2.2.9upstream/2.2.9
Diffstat (limited to 'modules/cache')
| -rw-r--r-- | modules/cache/cache_cache.c | 14 | ||||
| -rw-r--r-- | modules/cache/cache_cache.h | 14 | ||||
| -rw-r--r-- | modules/cache/cache_hash.c | 16 | ||||
| -rw-r--r-- | modules/cache/cache_hash.h | 16 | ||||
| -rw-r--r-- | modules/cache/cache_storage.c | 7 | ||||
| -rw-r--r-- | modules/cache/cache_util.c | 8 | ||||
| -rw-r--r-- | modules/cache/mod_cache.c | 6 | ||||
| -rw-r--r-- | modules/cache/mod_cache.dsp | 24 | ||||
| -rw-r--r-- | modules/cache/mod_mem_cache.dsp | 32 |
9 files changed, 83 insertions, 54 deletions
diff --git a/modules/cache/cache_cache.c b/modules/cache/cache_cache.c index 860800bb..4fc95d73 100644 --- a/modules/cache/cache_cache.c +++ b/modules/cache/cache_cache.c @@ -44,7 +44,7 @@ struct cache_cache_t { cache_cache_free *free_entry; }; -CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries, +cache_cache_t* cache_init(int max_entries, apr_size_t max_size, cache_pqueue_get_priority get_pri, cache_pqueue_set_priority set_pri, @@ -75,7 +75,7 @@ CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries, return tmp; } -CACHE_DECLARE(void) cache_free(cache_cache_t *c) +void cache_free(cache_cache_t *c) { cache_pq_free(c->pq); cache_hash_free(c->ht); @@ -83,12 +83,12 @@ CACHE_DECLARE(void) cache_free(cache_cache_t *c) } -CACHE_DECLARE(void*) cache_find(cache_cache_t* c, const char *key) +void* cache_find(cache_cache_t* c, const char *key) { return cache_hash_get(c->ht, key, CACHE_HASH_KEY_STRING); } -CACHE_DECLARE(void) cache_update(cache_cache_t* c, void *entry) +void cache_update(cache_cache_t* c, void *entry) { long old_priority; long new_priority; @@ -99,7 +99,7 @@ CACHE_DECLARE(void) cache_update(cache_cache_t* c, void *entry) cache_pq_change_priority(c->pq, old_priority, new_priority, entry); } -CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry) +void cache_insert(cache_cache_t* c, void *entry) { void *ejected = NULL; long priority; @@ -132,7 +132,7 @@ CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry) cache_hash_set(c->ht, c->key_entry(entry), CACHE_HASH_KEY_STRING, entry); } -CACHE_DECLARE(void *) cache_pop(cache_cache_t *c) +void* cache_pop(cache_cache_t *c) { void *entry; @@ -150,7 +150,7 @@ CACHE_DECLARE(void *) cache_pop(cache_cache_t *c) return entry; } -CACHE_DECLARE(apr_status_t) cache_remove(cache_cache_t *c, void *entry) +apr_status_t cache_remove(cache_cache_t *c, void *entry) { apr_size_t entry_size = c->size_entry(entry); apr_status_t rc; diff --git a/modules/cache/cache_cache.h b/modules/cache/cache_cache.h index 042c5d50..e805cf20 100644 --- a/modules/cache/cache_cache.h +++ b/modules/cache/cache_cache.h @@ -57,7 +57,7 @@ typedef void cache_cache_free(void *a); * @param key_entry callback to get the key of a entry * @param free_entry callback to free an entry */ -CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries, +cache_cache_t* cache_init(int max_entries, apr_size_t max_size, cache_pqueue_get_priority get_pri, cache_pqueue_set_priority set_pri, @@ -72,37 +72,37 @@ CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries, * free up the cache * @param c the cache */ -CACHE_DECLARE(void) cache_free(cache_cache_t *c); +void cache_free(cache_cache_t *c); /** * find a entry in the cache, incrementing the frequency if found * @param c the cache * @param key the key */ -CACHE_DECLARE(void*) cache_find(cache_cache_t* c, const char *key); +void* cache_find(cache_cache_t* c, const char *key); /** * insert a entry into the cache * @param c the cache * @param entry the entry */ -CACHE_DECLARE(void) cache_update(cache_cache_t* c, void *entry); +void cache_update(cache_cache_t* c, void *entry); /** * insert a entry into the cache * @param c the cache * @param entry the entry */ -CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry); +void cache_insert(cache_cache_t* c, void *entry); /** * pop the lowest priority item off * @param c the cache * @returns the entry or NULL */ -CACHE_DECLARE(void *)cache_pop(cache_cache_t* c); +void* cache_pop(cache_cache_t* c); /** * remove an item from the cache * @param c the cache * @param entry the actual entry (from a find) */ -CACHE_DECLARE(apr_status_t) cache_remove(cache_cache_t* c, void *entry); +apr_status_t cache_remove(cache_cache_t* c, void *entry); #ifdef __cplusplus } #endif diff --git a/modules/cache/cache_hash.c b/modules/cache/cache_hash.c index 2ac26ec8..202cf9f7 100644 --- a/modules/cache/cache_hash.c +++ b/modules/cache/cache_hash.c @@ -80,7 +80,7 @@ static cache_hash_entry_t **alloc_array(cache_hash_t *ht, int max) return calloc(1, sizeof(*ht->array) * (max + 1)); } -CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size) +cache_hash_t* cache_hash_make(apr_size_t size) { cache_hash_t *ht; ht = malloc(sizeof(cache_hash_t)); @@ -97,7 +97,7 @@ CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size) return ht; } -CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht) +void cache_hash_free(cache_hash_t *ht) { if (ht) { if (ht->array) { @@ -110,7 +110,7 @@ CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht) * Hash iteration functions. */ -CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi) +cache_hash_index_t* cache_hash_next(cache_hash_index_t *hi) { hi->this = hi->next; while (!hi->this) { @@ -122,7 +122,7 @@ CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi) return hi; } -CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht) +cache_hash_index_t* cache_hash_first(cache_hash_t *ht) { cache_hash_index_t *hi; @@ -134,7 +134,7 @@ CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht) return cache_hash_next(hi); } -CACHE_DECLARE(void) cache_hash_this(cache_hash_index_t *hi, +void cache_hash_this(cache_hash_index_t *hi, const void **key, apr_ssize_t *klen, void **val) @@ -240,7 +240,7 @@ static cache_hash_entry_t **find_entry(cache_hash_t *ht, return hep; } -CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht, +void* cache_hash_get(cache_hash_t *ht, const void *key, apr_ssize_t klen) { @@ -252,7 +252,7 @@ CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht, return NULL; } -CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht, +void* cache_hash_set(cache_hash_t *ht, const void *key, apr_ssize_t klen, const void *val) @@ -284,7 +284,7 @@ CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht, return NULL; } -CACHE_DECLARE(int) cache_hash_count(cache_hash_t *ht) +int cache_hash_count(cache_hash_t *ht) { return ht->count; } diff --git a/modules/cache/cache_hash.h b/modules/cache/cache_hash.h index 4138aca7..13a5eb4c 100644 --- a/modules/cache/cache_hash.h +++ b/modules/cache/cache_hash.h @@ -59,7 +59,7 @@ typedef struct cache_hash_index_t cache_hash_index_t; * @param size * @return The hash table just created */ -CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size); +cache_hash_t* cache_hash_make(apr_size_t size); /** * Create a hash table. @@ -70,7 +70,7 @@ CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size); * not removed from the cache prior to calling cache_hash_free() * will be unaccessable. */ -CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht); +void cache_hash_free(cache_hash_t *ht); /** @@ -82,7 +82,7 @@ CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht); * @remark If the value is NULL the hash entry is deleted. * @return The value of the deleted cache entry (so the caller can clean it up). */ -CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht, const void *key, +void* cache_hash_set(cache_hash_t *ht, const void *key, apr_ssize_t klen, const void *val); /** @@ -92,7 +92,7 @@ CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht, const void *key, * @param klen Length of the key. Can be CACHE_HASH_KEY_STRING to use the string length. * @return Returns NULL if the key is not present. */ -CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht, const void *key, +void* cache_hash_get(cache_hash_t *ht, const void *key, apr_ssize_t klen); /** @@ -121,7 +121,7 @@ CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht, const void *key, * progress at the same time. * </PRE> */ -CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht); +cache_hash_index_t* cache_hash_first(cache_hash_t *ht); /** * Continue iterating over the entries in a hash table. @@ -129,7 +129,7 @@ CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht); * @return a pointer to the updated iteration state. NULL if there are no more * entries. */ -CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi); +cache_hash_index_t* cache_hash_next(cache_hash_index_t *hi); /** * Get the current entry's details from the iteration state. @@ -140,7 +140,7 @@ CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi); * @remark The return pointers should point to a variable that will be set to the * corresponding data, or they may be NULL if the data isn't interesting. */ -CACHE_DECLARE(void) cache_hash_this(cache_hash_index_t *hi, const void **key, +void cache_hash_this(cache_hash_index_t *hi, const void **key, apr_ssize_t *klen, void **val); /** @@ -148,7 +148,7 @@ CACHE_DECLARE(void) cache_hash_this(cache_hash_index_t *hi, const void **key, * @param ht The hash table * @return The number of key/value pairs in the hash table. */ -CACHE_DECLARE(int) cache_hash_count(cache_hash_t *ht); +int cache_hash_count(cache_hash_t *ht); /** @} */ diff --git a/modules/cache/cache_storage.c b/modules/cache/cache_storage.c index 0ddf82dd..7b99f3ed 100644 --- a/modules/cache/cache_storage.c +++ b/modules/cache/cache_storage.c @@ -286,6 +286,13 @@ int cache_select(request_rec *r) apr_table_unset(r->headers_in, "If-Range"); apr_table_unset(r->headers_in, "If-Unmodified-Since"); + /* + * Do not do Range requests with our own conditionals: If + * we get 304 the Range does not matter and otherwise the + * entity changed and we want to have the complete entity + */ + apr_table_unset(r->headers_in, "Range"); + etag = apr_table_get(h->resp_hdrs, "ETag"); lastmod = apr_table_get(h->resp_hdrs, "Last-Modified"); diff --git a/modules/cache/cache_util.c b/modules/cache/cache_util.c index 75d35bd6..78770ffd 100644 --- a/modules/cache/cache_util.c +++ b/modules/cache/cache_util.c @@ -235,6 +235,14 @@ CACHE_DECLARE(int) ap_cache_check_freshness(cache_handle_t *h, cc_cresp = apr_table_get(h->resp_hdrs, "Cache-Control"); expstr = apr_table_get(h->resp_hdrs, "Expires"); + if (ap_cache_liststr(NULL, cc_cresp, "no-cache", NULL)) { + /* + * The cached entity contained Cache-Control: no-cache, so treat as + * stale causing revalidation + */ + return 0; + } + if ((agestr = apr_table_get(h->resp_hdrs, "Age"))) { age_c = apr_atoi64(agestr); } diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c index 51341179..27df70d4 100644 --- a/modules/cache/mod_cache.c +++ b/modules/cache/mod_cache.c @@ -613,6 +613,12 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) cache->provider->remove_entity(cache->stale_handle); /* Treat the request as if it wasn't conditional. */ cache->stale_handle = NULL; + /* + * Restore the original request headers as they may be needed + * by further output filters like the byterange filter to make + * the correct decisions. + */ + r->headers_in = cache->stale_headers; } } diff --git a/modules/cache/mod_cache.dsp b/modules/cache/mod_cache.dsp index ba1653bf..40a1b34e 100644 --- a/modules/cache/mod_cache.dsp +++ b/modules/cache/mod_cache.dsp @@ -104,18 +104,6 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" # Begin Source File -SOURCE=.\cache_cache.c -# End Source File -# Begin Source File - -SOURCE=.\cache_hash.c -# End Source File -# Begin Source File - -SOURCE=.\cache_pqueue.c -# End Source File -# Begin Source File - SOURCE=.\cache_storage.c # End Source File # Begin Source File @@ -132,18 +120,6 @@ SOURCE=.\mod_cache.c # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File -SOURCE=.\cache_cache.h -# End Source File -# Begin Source File - -SOURCE=.\cache_hash.h -# End Source File -# Begin Source File - -SOURCE=.\cache_pqueue.h -# End Source File -# Begin Source File - SOURCE=.\mod_cache.h # End Source File # End Group diff --git a/modules/cache/mod_mem_cache.dsp b/modules/cache/mod_mem_cache.dsp index 003e4efc..7b8ebbb9 100644 --- a/modules/cache/mod_mem_cache.dsp +++ b/modules/cache/mod_mem_cache.dsp @@ -99,14 +99,46 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma # Name "mod_mem_cache - Win32 Release" # Name "mod_mem_cache - Win32 Debug" +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\cache_cache.h +# End Source File +# Begin Source File + +SOURCE=.\cache_hash.h +# End Source File +# Begin Source File + +SOURCE=.\cache_pqueue.h +# End Source File # Begin Source File SOURCE=.\mod_cache.h # End Source File +# End Group +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cache_cache.c +# End Source File +# Begin Source File + +SOURCE=.\cache_hash.c +# End Source File +# Begin Source File + +SOURCE=.\cache_pqueue.c +# End Source File # Begin Source File SOURCE=.\mod_mem_cache.c # End Source File +# End Group # Begin Source File SOURCE=..\..\build\win32\httpd.rc |
