]> granicus.if.org Git - apache/commitdiff
Win32: Shutdown the listeners before telling the accept threads to quit.
authorBill Stoddard <stoddard@apache.org>
Fri, 24 May 2002 16:58:23 +0000 (16:58 +0000)
committerBill Stoddard <stoddard@apache.org>
Fri, 24 May 2002 16:58:23 +0000 (16:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95268 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/winnt/mpm_winnt.c

index 87b125b5548f483251d34897bee8150e51c5f829..b7f9acd42c82448c8e48f711d3d4c762e0f0ca25 100644 (file)
@@ -1362,21 +1362,25 @@ static void child_main()
      */
 
  shutdown:
-    /* Setting is_graceful will cause keep-alive connections to be closed
-     * rather than block on the next network read.
+    /* Setting is_graceful will cause threads handling keep-alive connections 
+     * to close the connection after handling the current request.
      */
     is_graceful = 1;
 
-    /* Setting shutdown_in_progress prevents new connections from
-     * being accepted but allows the worker threads to continue
-     * handling connections that have already been accepted.
+    /* Close the listening sockets. Note, we must close the listeners
+     * before closing any accept sockets pending in AcceptEx to prevent
+     * memory leaks in the kernel.
      */
-    shutdown_in_progress = 1;
-
-    /* Close the listening sockets. */
     for (lr = ap_listeners; lr ; lr = lr->next) {
         apr_socket_close(lr->sd);
     }
+
+    /* Shutdown listener threads and pending AcceptEx socksts 
+     * but allow the worker threads to continue consuming from
+     * the queue of accepted connections.
+     */
+    shutdown_in_progress = 1;
+
     Sleep(1000);
 
     /* Tell the worker threads to exit */