You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2009/01/07 19:22:08 UTC

svn commit: r732414 - in /httpd/httpd/trunk: CHANGES server/mpm/prefork/prefork.c

Author: trawick
Date: Wed Jan  7 10:22:07 2009
New Revision: 732414

URL: http://svn.apache.org/viewvc?rev=732414&view=rev
Log:
As jorton discovered, recent Linux kernels have a new tunable
setting for epoll that will trip up many prefork users.  Write
a log message instead of crashing.

PR: 46467

As rpluem notes, some Apache doc is in order.


Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/server/mpm/prefork/prefork.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=732414&r1=732413&r2=732414&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed Jan  7 10:22:07 2009
@@ -2,6 +2,9 @@
 Changes with Apache 2.3.2
 [ When backported to 2.2.x, remove entry from this file ]
 
+ *) prefork: Log an error instead of segfaulting when child startup fails
+    due to pollset creation failures.  PR 46467.  [Jeff Trawick]
+
  *) mod_session_crypto: Ensure that SessionCryptoDriver can only be
     set in the global scope. [Graham Leggett]
 

Modified: httpd/httpd/trunk/server/mpm/prefork/prefork.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/prefork/prefork.c?rev=732414&r1=732413&r2=732414&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/prefork/prefork.c (original)
+++ httpd/httpd/trunk/server/mpm/prefork/prefork.c Wed Jan  7 10:22:07 2009
@@ -484,8 +484,12 @@
     (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
 
     /* Set up the pollfd array */
-    /* ### check the status */
-    (void) apr_pollset_create(&pollset, num_listensocks, pchild, 0);
+    status = apr_pollset_create(&pollset, num_listensocks, pchild, 0);
+    if (status != APR_SUCCESS) {
+        ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
+                     "Couldn't create pollset in child; check system or user limits");
+        clean_child_exit(APEXIT_CHILDSICK); /* assume temporary resource issue */
+    }
 
     for (lr = ap_listeners, i = num_listensocks; i--; lr = lr->next) {
         apr_pollfd_t pfd = { 0 };