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 2008/05/07 21:38:51 UTC
svn commit: r654232 - in /httpd/httpd/trunk: CHANGES
modules/generators/mod_cgid.c
Author: trawick
Date: Wed May 7 12:38:50 2008
New Revision: 654232
URL: http://svn.apache.org/viewvc?rev=654232&view=rev
Log:
mod_cgid: Don't try to restart the daemon if it fails to initialize the socket.
It won't get any better without intervention, and it will fork() until some
sort of intervention.
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/generators/mod_cgid.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=654232&r1=654231&r2=654232&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed May 7 12:38:50 2008
@@ -2,6 +2,8 @@
Changes with Apache 2.3.0
[ When backported to 2.2.x, remove entry from this file ]
+ *) mod_cgid: Don't try to restart the daemon if it fails to initialize
+ the socket. [Jeff Trawick]
*) core: Do not allow Options ALL if not all options are allowed to be
overwritten. PR 44262 [Michał Grzędzicki <lazy iq.pl>]
Modified: httpd/httpd/trunk/modules/generators/mod_cgid.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_cgid.c?rev=654232&r1=654231&r2=654232&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/generators/mod_cgid.c (original)
+++ httpd/httpd/trunk/modules/generators/mod_cgid.c Wed May 7 12:38:50 2008
@@ -91,6 +91,15 @@
static pid_t parent_pid;
static ap_unix_identity_t empty_ugid = { (uid_t)-1, (gid_t)-1, -1 };
+/* The APR other-child API doesn't tell us how the daemon exited
+ * (SIGSEGV vs. exit(1)). The other-child maintenance function
+ * needs to decide whether to restart the daemon after a failure
+ * based on whether or not it exited due to a fatal startup error
+ * or something that happened at steady-state. This exit status
+ * is unlikely to collide with exit signals.
+ */
+#define DAEMON_STARTUP_ERROR 254
+
/* Read and discard the data in the brigade produced by a CGI script */
static void discard_script_output(apr_bucket_brigade *bb);
@@ -254,9 +263,15 @@
stopping = 0;
}
if (!stopping) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "cgid daemon process died, restarting");
- cgid_start(root_pool, root_server, proc);
+ if (status == DAEMON_STARTUP_ERROR) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL,
+ "cgid daemon failed to initialize");
+ }
+ else {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
+ "cgid daemon process died, restarting");
+ cgid_start(root_pool, root_server, proc);
+ }
}
break;
case APR_OC_REASON_RESTART:
@@ -785,7 +800,7 @@
apr_hash_set(script_hash, key, sizeof(cgid_req.conn_id),
(void *)((long)procnew->pid));
}
- return -1;
+ return -1; /* should be <= 0 to distinguish from startup errors */
}
static int cgid_start(apr_pool_t *p, server_rec *main_server,
@@ -802,8 +817,7 @@
if (pcgi == NULL) {
apr_pool_create(&pcgi, p);
}
- cgid_server(main_server);
- exit(-1);
+ exit(cgid_server(main_server) > 0 ? DAEMON_STARTUP_ERROR : -1);
}
procnew->pid = daemon_pid;
procnew->err = procnew->in = procnew->out = NULL;