On Mon, Mar 12, 2018 at 12:53 PM, Yann Ylavic <ylavic....@gmail.com> wrote:
>
> Can you still reproduce with this patch:
>
> Index: modules/http/http_request.c
> ===================================================================
> --- modules/http/http_request.c    (revision 1826315)
> +++ modules/http/http_request.c    (working copy)
> @@ -470,7 +470,7 @@ AP_DECLARE(void) ap_process_request(request_rec *r
>
>      ap_process_async_request(r);
>
> -    if (!c->data_in_input_filters) {
> +    if (!c->data_in_input_filters && !c->aborted) {
>          bb = apr_brigade_create(c->pool, c->bucket_alloc);
>          b = apr_bucket_flush_create(c->bucket_alloc);
>          APR_BRIGADE_INSERT_HEAD(bb, b);
> ?

Hmm, no, nevermind, ap_pass_brigade() won't return APR_TIMEOUT if
c->aborted already.

The fix could be something like this:

Index: modules/http/http_request.c
===================================================================
--- modules/http/http_request.c    (revision 1826315)
+++ modules/http/http_request.c    (working copy)
@@ -484,9 +484,8 @@ AP_DECLARE(void) ap_process_request(request_rec *r
              * It is still safe to use r / r->pool here as the eor bucket
              * could not have been destroyed in the event of a timeout.
              */
-            ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r, APLOGNO(01581)
-                          "Timeout while writing data for URI %s to the"
-                          " client", r->unparsed_uri);
+            ap_log_cerror(APLOG_MARK, APLOG_INFO, rv, c, APLOGNO(01581)
+                          "flushing data to the client");
         }
     }
     if (ap_extended_status) {
_

Would you test if it works for you?

Reply via email to