]> granicus.if.org Git - apache/commitdiff
Merge r1523387 from trunk:
authorJim Jagielski <jim@apache.org>
Tue, 4 Feb 2014 14:22:18 +0000 (14:22 +0000)
committerJim Jagielski <jim@apache.org>
Tue, 4 Feb 2014 14:22:18 +0000 (14:22 +0000)
In 2.4, the MPM leaves a copy of the non-disconnected FD sitting in
context->accept_socket. This FD will be closed a second time, often
shortly after a worker picks it up in this same FD being reused.  The
first recv fails with WSAENOTSOCK since the same FD was closed in the
listener thread while the worker was pulling it off the queue

(The second close is of the underlying FD/socket, not a shared
apr_socket_t, so it's not short-circuited)

This patch makes it a bit more 2.2.x-ish and solves my problem -- the
context->accept_socket gets zapped at the bottom of the loop if
!disconnected.

Submitted by: covener
Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1564313 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
server/mpm/winnt/child.c

diff --git a/CHANGES b/CHANGES
index e17569d025ee872e69f40e7bcec485c279677981..2389435524ab0af2743c2456cdc74b67a9a275d5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,10 @@
 
 Changes with Apache 2.4.8
 
+  *) WinNT MPM: If ap_run_pre_connection() fails or sets c->aborted, don't
+     save the socket for reuse by the next worker as if it were an 
+     APR_SO_DISCONNECTED socket. Restores 2.2 behavior. [Eric Covener]
+
   *) mod_dir: Don't search for a DirectoryIndex or DirectorySlash on a URL
      that was just rewritten by mod_rewrite. PR53929. [Eric Covener]
 
diff --git a/STATUS b/STATUS
index 7b11b384c786ff14b0f524bd190de73ab16115ee..3cfe6d98f2091fb666f4a33dba07b78180ad5672 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -98,12 +98,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-   * WinNT MPM: If ap_run_pre_connection() fails or sets c->aborted, don't
-     save the socket for reuse by the next worker as if it were an
-     APR_SO_DISCONNECTED socket. Restores 2.2 behavior.
-     trunk patch: http://svn.apache.org/r1523387
-     2.4.x patch: trunk works
-     +1: trawick, covener, jim
 
 
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
index c9168b08efa52fdc1fd93318c5b23aa3e03a1981..6879179fa1e404399d3ae8699fa26b9423a56f83 100644 (file)
@@ -878,12 +878,13 @@ static DWORD __stdcall worker_main(void *thread_num_val)
 
         if (!c->aborted) {
             ap_run_process_connection(c);
+        }
 
-            apr_socket_opt_get(context->sock, APR_SO_DISCONNECTED,
-                               &disconnected);
+        apr_socket_opt_get(context->sock, APR_SO_DISCONNECTED, &disconnected);
 
-            if (!disconnected) {
-                context->accept_socket = INVALID_SOCKET;
+        if (!disconnected) {
+            context->accept_socket = INVALID_SOCKET;
+            if (!c->aborted) { 
                 ap_lingering_close(c);
             }
         }