]> granicus.if.org Git - apache/commitdiff
event: follow up to r1762718.
authorYann Ylavic <ylavic@apache.org>
Thu, 15 Dec 2016 23:17:26 +0000 (23:17 +0000)
committerYann Ylavic <ylavic@apache.org>
Thu, 15 Dec 2016 23:17:26 +0000 (23:17 +0000)
On graceful shutdown/restart, kill kept-alive connections before poll()ing
again, avoiding to wait for their "normal" timers (before being woken up)
when they remain the last handled connections.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1774538 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/event/event.c

index 01dc6c5eb726a92ab56124fc25f88e1367321f9b..11bb876a52b8366a872fda2825a471f6dcd7cff4 100644 (file)
@@ -1967,12 +1967,16 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
         rc = apr_pollset_poll(event_pollset, timeout_interval, &num, &out_pfd);
         if (rc != APR_SUCCESS) {
             if (APR_STATUS_IS_EINTR(rc)) {
-                /* Woken up, either update timeouts or shutdown,
-                 * both logics are above.
+                /* Woken up, if we are exiting we must fall through to kill
+                 * kept-alive connections, otherwise we only need to update
+                 * timeouts (logic is above, so restart the loop).
                  */
-                continue;
+                if (!listener_may_exit) {
+                    continue;
+                }
+                timeout_time = 0;
             }
-            if (!APR_STATUS_IS_TIMEUP(rc)) {
+            else if (!APR_STATUS_IS_TIMEUP(rc)) {
                 ap_log_error(APLOG_MARK, APLOG_CRIT, rc, ap_server_conf,
                              APLOGNO(03267)
                              "apr_pollset_poll failed.  Attempting to "