PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * WinNT MPM diagnostics related to child checking for abrupt parent termination; I've
- noticed 3 users so far with 2.4.9 reporting failures in this recently-modified
- code. (There are some references in one of the commits; I just found another
- was on a German-language PHP list.)
- trunk patch: http://svn.apache.org/r1606368
- http://svn.apache.org/r1607352
- 2.4.x patch: http://people.apache.org/~trawick/winnt_diagnostics_1606368_1607352.txt
- +1: trawick, covener, gsmith
-
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
2.4.x patch: http://people.apache.org/~jorton/ms_tmpdh-2.4.x.diff
+1: jorton,
- * WinNT MPM diagnostics related to child checking for abrupt parent termination; I've
- noticed 3 users so far with 2.4.9 reporting failures in this recently-modified
- code. (There are some references in one of the commits; I just found another
- was on a German-language PHP list.)
- trunk patch: http://svn.apache.org/r1606368
- http://svn.apache.org/r1607352
- 2.4.x patch: http://people.apache.org/~trawick/winnt_diagnostics_1606368_1607352.txt
- +1: trawick, covener, gsmith
-
OTHER PROPOSALS
* A list of further possible backports can be found at:
if (parent_pid != my_pid) {
child_events[2] = OpenProcess(SYNCHRONIZE, FALSE, parent_pid);
- num_events = 3;
+ if (child_events[2] == NULL) {
+ num_events = 2;
+ ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), ap_server_conf, APLOGNO(02643)
+ "Child: Failed to open handle to parent process %ld; "
+ "will not react to abrupt parent termination", parent_pid);
+ }
+ else {
+ num_events = 3;
+ }
}
else {
/* presumably -DONE_PROCESS */
apr_sleep(1 * APR_USEC_PER_SEC);
}
- /* Wait for one of three events:
+ /* Wait for one of these events:
* exit_event:
* The exit_event is signaled by the parent process to notify
* the child that it is time to exit.
* This event is signaled by the worker threads to indicate that
* the process has handled MaxConnectionsPerChild connections.
*
+ * parent process exiting
+ *
* TIMEOUT:
* To do periodic maintenance on the server (check for thread exits,
* number of completion contexts, etc.)
rv = WaitForMultipleObjects(num_events, (HANDLE *)child_events, FALSE, INFINITE);
cld = rv - WAIT_OBJECT_0;
#else
+ /* THIS IS THE EXPECTED BUILD VARIATION */
rv = WaitForMultipleObjects(num_events, (HANDLE *)child_events, FALSE, 1000);
cld = rv - WAIT_OBJECT_0;
if (rv == WAIT_TIMEOUT) {
ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(),
ap_server_conf, APLOGNO(00356)
"Child: WAIT_FAILED -- shutting down server");
+ /* check handle validity to identify a possible culprit */
+ for (i = 0; i < num_events; i++) {
+ DWORD out_flags;
+
+ if (0 == GetHandleInformation(child_events[i], &out_flags)) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(),
+ ap_server_conf, APLOGNO(02644)
+ "Child: Event handle #%d (%pp) is invalid",
+ i, child_events[i]);
+ }
+ }
break;
}
else if (cld == 0) {