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 };