httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From traw...@apache.org
Subject svn commit: r1608907 - in /httpd/httpd/branches/2.4.x: CHANGES STATUS server/mpm/winnt/child.c
Date Tue, 08 Jul 2014 19:19:22 GMT
Author: trawick
Date: Tue Jul  8 19:19:22 2014
New Revision: 1608907

URL: http://svn.apache.org/r1608907
Log:
Merge r1606368 and r1607352 from trunk:

Follow up to r1527220/r1588852:

Implement better error checking/reporting around notification of abrupt parent
process termination.

It is likely that something bad is happening here based on these
user reports:

https://www.apachelounge.com/viewtopic.php?p=27848
http://mail-archives.apache.org/mod_mbox/httpd-users/201406.mbox/%3CCAC%2BRZnuwLD%2BJnoy2TYO8oeAWt6bFLMa%3DEhfDf9hS3cuuGUHXAw%40mail.gmail.com%3E


w-up to r1606368: HANDLE is PVOID which is void * (fix format string)

Submitted by: trawick
Reviewed by: covener, gsmith

Modified:
    httpd/httpd/branches/2.4.x/CHANGES
    httpd/httpd/branches/2.4.x/STATUS
    httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c

Modified: httpd/httpd/branches/2.4.x/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/CHANGES?rev=1608907&r1=1608906&r2=1608907&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/CHANGES [utf-8] (original)
+++ httpd/httpd/branches/2.4.x/CHANGES [utf-8] Tue Jul  8 19:19:22 2014
@@ -2,6 +2,9 @@
 
 Changes with Apache 2.4.10
 
+  *) WinNT MPM: Improve error handling for termination events in child.
+     [Jeff Trawick]
+
   *) mod_proxy: When ping/pong is configured for a worker, don't send or
      forward "100 Continue" (interim) response to the client if it does
      not expect one. [Yann Ylavic]

Modified: httpd/httpd/branches/2.4.x/STATUS
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/STATUS?rev=1608907&r1=1608906&r2=1608907&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/STATUS (original)
+++ httpd/httpd/branches/2.4.x/STATUS Tue Jul  8 19:19:22 2014
@@ -100,15 +100,6 @@ RELEASE SHOWSTOPPERS:
 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 ]
@@ -194,15 +185,6 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK:
      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: 

Modified: httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c?rev=1608907&r1=1608906&r2=1608907&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c Tue Jul  8 19:19:22 2014
@@ -986,7 +986,15 @@ void child_main(apr_pool_t *pconf, DWORD
 
     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 */
@@ -1084,7 +1092,7 @@ void child_main(apr_pool_t *pconf, DWORD
         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.
@@ -1093,6 +1101,8 @@ void child_main(apr_pool_t *pconf, DWORD
      *    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.)
@@ -1113,6 +1123,7 @@ void child_main(apr_pool_t *pconf, DWORD
         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) {
@@ -1125,6 +1136,17 @@ void child_main(apr_pool_t *pconf, DWORD
             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) {



Mime
View raw message