You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by co...@apache.org on 2014/08/30 14:59:44 UTC

svn commit: r1621453 - /httpd/httpd/trunk/modules/filters/mod_reqtimeout.c

Author: covener
Date: Sat Aug 30 12:59:44 2014
New Revision: 1621453

URL: http://svn.apache.org/r1621453
Log:
PR56729: mod_reqtimeout gets confused when it sees a read via
check_pipeline() just before a slow HTTP response completes.


Modified:
    httpd/httpd/trunk/modules/filters/mod_reqtimeout.c

Modified: httpd/httpd/trunk/modules/filters/mod_reqtimeout.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/filters/mod_reqtimeout.c?rev=1621453&r1=1621452&r2=1621453&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/filters/mod_reqtimeout.c (original)
+++ httpd/httpd/trunk/modules/filters/mod_reqtimeout.c Sat Aug 30 12:59:44 2014
@@ -183,6 +183,16 @@ static apr_status_t reqtimeout_filter(ap
         return ap_get_brigade(f->next, bb, mode, block, readbytes);
     }
 
+    if (block == APR_NONBLOCK_READ && mode == AP_MODE_SPECULATIVE) { 
+        /*  The source of these above us in the core is check_pipeline(), which
+         *  is between requests but before this filter knows to reset timeouts 
+         *  during log_transaction().  If they appear elsewhere, just don't 
+         *  check or extend the time since they won't block and we'll see the
+         *  bytes again later
+         */
+        return ap_get_brigade(f->next, bb, mode, block, readbytes);
+    }
+
     if (ccfg->new_timeout > 0) {
         /* set new timeout */
         now = apr_time_now();