]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Merge r425787 from trunk:
authorRuediger Pluem <rpluem@apache.org>
Thu, 17 May 2007 10:55:15 +0000 (10:55 +0000)
committerRuediger Pluem <rpluem@apache.org>
Thu, 17 May 2007 10:55:15 +0000 (10:55 +0000)
* Remove all filters that are before the cache_out filter. This ensures
  that we kick off the filter stack with our cache_out filter being the
  first in the chain. This make sense because we want to restore things
  in the same manner as we saved them.
  There may be filters before our cache_out filter, because

  1. We call ap_set_content_type during cache_select. This causes
     Content-Type specific filters to be added.
  2. We call the insert_filter hook. This causes filters e.g. like
     the ones set with SetOutputFilter to be added.

PR: 40090

Submitted by: rpluem
Reviewed by: rpluem, wrowe, jerenkrantz

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@538868 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/cache/mod_cache.c

diff --git a/CHANGES b/CHANGES
index 1742754a8f9706e185364f7afd7be4d7f331e46c..bd0bf756c404f06bf3cf286c27b7477e5c359c47 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.2.5
 
+  *) mod_cache: While serving a cached entity ensure that filters that have
+     been applied to this cached entity before saving it to the cache are not
+     applied again. PR 40090. [Ruediger Pluem]
+
   *) mod_cache: Correctly cache objects whose URL query string has been
      modified by mod_rewrite. PR 40805. [Ruediger Pluem]
 
diff --git a/STATUS b/STATUS
index d9faf0386adc447afa123745151de7ed0a6043a7..f77d1a71b39a997059ffe062b569d1c787636b90 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -105,16 +105,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
      http://svn.apache.org/viewvc?view=rev&rev=520733
      +1: wrowe, rpluem, niq
 
-   * mod_cache: While serving a cached entity ensure that filters that have
-     been applied to this cached entity before saving it to the cache are not
-     applied again.
-        PR: 40090
-     Trunk version of patch:
-       http://svn.apache.org/viewvc?rev=425787&view=rev
-     2.2.x version of patch:
-       Trunk version works
-     +1: rpluem, wrowe, jerenkrantz
-
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
 
     * ApacheMonitor: Fix Windows Vista detection.
index acdad8e8b616af99cdc1b330446ef0e15f82d8c1..ffee10675dd9434402b05a939850325f91b8b31a 100644 (file)
@@ -56,6 +56,8 @@ static int cache_url_handler(request_rec *r, int lookup)
     cache_request_rec *cache;
     cache_server_conf *conf;
     apr_bucket_brigade *out;
+    ap_filter_t *next;
+    ap_filter_rec_t *cache_out_handle;
 
     /* Delay initialization until we know we are handling a GET */
     if (r->method_number != M_GET) {
@@ -213,12 +215,29 @@ static int cache_url_handler(request_rec *r, int lookup)
      * or not.
      */
     if (r->main) {
-        ap_add_output_filter_handle(cache_out_subreq_filter_handle, NULL,
-                                    r, r->connection);
+        cache_out_handle = cache_out_subreq_filter_handle;
     }
     else {
-        ap_add_output_filter_handle(cache_out_filter_handle, NULL,
-                                    r, r->connection);
+        cache_out_handle = cache_out_filter_handle;
+    }
+    ap_add_output_filter_handle(cache_out_handle, NULL, r, r->connection);
+
+    /*
+     * Remove all filters that are before the cache_out filter. This ensures
+     * that we kick off the filter stack with our cache_out filter being the
+     * first in the chain. This make sense because we want to restore things
+     * in the same manner as we saved them.
+     * There may be filters before our cache_out filter, because
+     *
+     * 1. We call ap_set_content_type during cache_select. This causes
+     *    Content-Type specific filters to be added.
+     * 2. We call the insert_filter hook. This causes filters e.g. like
+     *    the ones set with SetOutputFilter to be added.
+     */
+    next = r->output_filters;
+    while (next && (next->frec != cache_out_handle)) {
+        ap_remove_output_filter(next);
+        next = next->next;
     }
 
     /* kick off the filter stack */