apr_bucket_brigade *bb;
apr_bucket *b;
conn_rec *c = r->connection;
+ apr_status_t rv;
ap_process_async_request(r);
bb = apr_brigade_create(c->pool, c->bucket_alloc);
b = apr_bucket_flush_create(c->bucket_alloc);
APR_BRIGADE_INSERT_HEAD(bb, b);
- ap_pass_brigade(c->output_filters, bb);
+ rv = ap_pass_brigade(c->output_filters, bb);
+ if (rv == APR_TIMEUP) {
+ /*
+ * Notice a timeout as an error message. This might be
+ * valuable for detecting clients with broken network
+ * connections or possible DoS attacks.
+ *
+ * It is still save 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_ERR, rv, r,
+ "Timeout while writing data for URI %s to the"
+ " client", r->unparsed_uri);
+ }
}
if (ap_extended_status) {
ap_time_process_request(c->sbh, STOP_PREQUEST);