summaryrefslogtreecommitdiffstats
path: root/httpd-2.2.4-oldflush.patch
blob: 66d8e93df303086dbcc3ccb7b1d002bc0a0e65f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

http://issues.apache.org/bugzilla/show_bug.cgi?id=36780

Upstream-Status: committed to trunk, r583817

--- httpd-2.2.4/server/util_filter.c.oldflush
+++ httpd-2.2.4/server/util_filter.c
@@ -578,8 +578,18 @@ AP_DECLARE_NONSTD(apr_status_t) ap_filte
                                                 void *ctx)
 {
     ap_filter_t *f = ctx;
+    apr_status_t rv;
 
-    return ap_pass_brigade(f, bb);
+    rv = ap_pass_brigade(f, bb);
+
+    /* apr_brigade_write* require that the flush function ensures that
+     * the brigade is empty upon return; otherwise the brigade may be
+     * left with a transient bucket whose contents have fallen out of
+     * scope.  Call cleanup here unconditionally to avoid the issue in
+     * all cases. */
+    apr_brigade_cleanup(bb);
+
+    return rv;
 }
 
 AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)