Index: modules/proxy/mod_proxy_http.c
===================================================================
--- modules/proxy/mod_proxy_http.c	(revision 1528080)
+++ modules/proxy/mod_proxy_http.c	(working copy)
@@ -244,10 +244,15 @@ static int stream_reqbody_chunked(apr_pool_t *p,
     apr_bucket_alloc_t *bucket_alloc = r->connection->bucket_alloc;
     apr_bucket_brigade *bb;
     apr_bucket *e;
+    int flushall = 0;
 
     add_te_chunked(p, bucket_alloc, header_brigade);
     terminate_headers(bucket_alloc, header_brigade);
 
+    if (apr_table_get(r->subprocess_env, "proxy-flushall")) {
+        flushall = 1;
+    }
+
     while (!APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(input_brigade)))
     {
         char chunk_hdr[20];  /* must be here due to transient bucket. */
@@ -305,7 +310,8 @@ static int stream_reqbody_chunked(apr_pool_t *p,
         }
 
         /* The request is flushed below this loop with chunk EOS header */
-        rv = ap_proxy_pass_brigade(bucket_alloc, r, p_conn, origin, bb, 0);
+        rv = ap_proxy_pass_brigade(bucket_alloc, r, p_conn, origin, bb,
+                                   flushall);
         if (rv != OK) {
             return rv;
         }
@@ -371,6 +377,7 @@ static int stream_reqbody_cl(apr_pool_t *p,
     apr_off_t cl_val = 0;
     apr_off_t bytes;
     apr_off_t bytes_streamed = 0;
+    int flushall = 0;
 
     if (old_cl_val) {
         char *endstr;
@@ -387,6 +394,10 @@ static int stream_reqbody_cl(apr_pool_t *p,
     }
     terminate_headers(bucket_alloc, header_brigade);
 
+    if (apr_table_get(r->subprocess_env, "proxy-flushall")) {
+        flushall = 1;
+    }
+
     while (!APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(input_brigade)))
     {
         apr_brigade_length(input_brigade, 1, &bytes);
@@ -450,7 +461,8 @@ static int stream_reqbody_cl(apr_pool_t *p,
         }
 
         /* Once we hit EOS, we are ready to flush. */
-        rv = ap_proxy_pass_brigade(bucket_alloc, r, p_conn, origin, bb, seen_eos);
+        rv = ap_proxy_pass_brigade(bucket_alloc, r, p_conn, origin, bb,
+                                   (seen_eos || flushall));
         if (rv != OK) {
             return rv ;
         }
@@ -700,6 +712,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_r
     apr_off_t bytes;
     int force10, rv;
     conn_rec *origin = p_conn->connection;
+    int flushall = 0;
 
     if (apr_table_get(r->subprocess_env, "force-proxy-request-1.0")) {
         if (r->expecting_100) {
@@ -710,6 +723,10 @@ int ap_proxy_http_request(apr_pool_t *p, request_r
         force10 = 0;
     }
 
+    if (apr_table_get(r->subprocess_env, "proxy-flushall")) {
+        flushall = 1;
+    }
+
     header_brigade = apr_brigade_create(p, origin->bucket_alloc);
     rv = ap_proxy_create_hdrbrgd(p, header_brigade, r, p_conn,
                                  worker, conf, uri, url, server_portstr,
@@ -822,7 +839,8 @@ int ap_proxy_http_request(apr_pool_t *p, request_r
      * (an arbitrary value.)
      */
     } while ((bytes_read < MAX_MEM_SPOOL - 80)
-              && !APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(input_brigade)));
+              && !APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(input_brigade))
+              && !flushall);
 
     /* Use chunked request body encoding or send a content-length body?
      *
@@ -876,7 +894,8 @@ int ap_proxy_http_request(apr_pool_t *p, request_r
         if (force10
              || (apr_table_get(r->subprocess_env, "proxy-sendcl")
                   && !apr_table_get(r->subprocess_env, "proxy-sendchunks")
-                  && !apr_table_get(r->subprocess_env, "proxy-sendchunked"))) {
+                  && !apr_table_get(r->subprocess_env, "proxy-sendchunked")
+                  && !flushall)) {
             rb_method = RB_SPOOL_CL;
         }
         else {
@@ -889,7 +908,8 @@ int ap_proxy_http_request(apr_pool_t *p, request_r
         }
         else if (!force10
                   && (apr_table_get(r->subprocess_env, "proxy-sendchunks")
-                      || apr_table_get(r->subprocess_env, "proxy-sendchunked"))
+                      || apr_table_get(r->subprocess_env, "proxy-sendchunked")
+                      || flushall)
                   && !apr_table_get(r->subprocess_env, "proxy-sendcl")) {
             rb_method = RB_STREAM_CHUNKED;
         }
