the Apache child process, CGI scripts, rotatelog process
etc. If the Apache child process segfaults, any processes
that the child started are not reaped. Prior to this fix,
these processes inherited the listening sockets which sometimes
prevented the restarted Apache child process from accepting
connections (ie, the server would hang).
The Sleep(1000) is a bit of a hack but it is sufficient I believe. All
that is really necessary is for the parent to give up its quantum and
allow the child to run. I could not get WaitForInputIdle to work properly.
Will investigate alternative solutions later.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89547
13f79535-47bb-0310-9956-
ffa450edef68
Changes with Apache 2.0.21-dev
-
+
+ *) Win32: Prevent listening sockets from being inherited by
+ the Apache child process, CGI scripts, rotatelog process
+ etc. If the Apache child process segfaults, any processes
+ that the child started are not reaped. Prior to this fix,
+ these processes inherited the listening sockets which sometimes
+ prevented the restarted Apache child process from accepting
+ connections (ie, the server would hang).
+ [Bill Stoddard]
+
*) Provide vhost and request strings when ExtendedStatus is on.
[Greg Ames]
#include "mpm_common.h"
#include "scoreboard.h"
-
typedef HANDLE thread;
#ifdef CONTAINING_RECORD
#undef CONTAINING_RECORD
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
+ /* Important:
+ * Give the child process a chance to run before dup'ing the sockets.
+ * We have already set the listening sockets noninheritable, but if
+ * WSADuplicateSocket runs before the child process initializes
+ * the listeners will be inherited anyway.
+ */
+ Sleep(1000);
+
/* Run the chain of open sockets. For each socket, duplicate it
* for the target process then send the WSAPROTOCOL_INFO
* (returned by dup socket) to the child.