summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorStefan Fritsch <sf@sfritsch.de>2011-12-27 19:42:39 +0100
committerStefan Fritsch <sf@sfritsch.de>2011-12-27 19:42:39 +0100
commit6a3ba4eb1e9c7d7e07529543117d79ac01af20f5 (patch)
treefb5c30ec79d5d0581e9519859f9b8cbc32756803 /server
parentad14e19ad0400e289b06fb7728aea815e6ed49be (diff)
downloadapache2-6a3ba4eb1e9c7d7e07529543117d79ac01af20f5.tar.gz
Upstream tarball 2.2.13upstream/2.2.13
Diffstat (limited to 'server')
-rw-r--r--server/util_filter.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/server/util_filter.c b/server/util_filter.c
index 7d48b52d..b2e7b582 100644
--- a/server/util_filter.c
+++ b/server/util_filter.c
@@ -578,8 +578,18 @@ AP_DECLARE_NONSTD(apr_status_t) ap_filter_flush(apr_bucket_brigade *bb,
void *ctx)
{
ap_filter_t *f = ctx;
+ apr_status_t rv;
- return ap_pass_brigade(f, bb);
+ rv = ap_pass_brigade(f, bb);
+
+ /* Before invocation of the flush callback, apr_brigade_write et
+ * al may place transient buckets in the brigade, which will fall
+ * out of scope after returning. Empty the brigade here, to avoid
+ * issues with leaving such buckets in the brigade if some filter
+ * fails and leaves a non-empty brigade. */
+ apr_brigade_cleanup(bb);
+
+ return rv;
}
AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)