diff options
author | Stefan Fritsch <sf@sfritsch.de> | 2011-12-27 19:42:39 +0100 |
---|---|---|
committer | Stefan Fritsch <sf@sfritsch.de> | 2011-12-27 19:42:39 +0100 |
commit | 6a3ba4eb1e9c7d7e07529543117d79ac01af20f5 (patch) | |
tree | fb5c30ec79d5d0581e9519859f9b8cbc32756803 /server | |
parent | ad14e19ad0400e289b06fb7728aea815e6ed49be (diff) | |
download | apache2-6a3ba4eb1e9c7d7e07529543117d79ac01af20f5.tar.gz |
Upstream tarball 2.2.13upstream/2.2.13
Diffstat (limited to 'server')
-rw-r--r-- | server/util_filter.c | 12 |
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) |