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 2003/12/13 23:18:13 UTC
cvs commit: httpd-2.0/server log.c
trawick 2003/12/13 14:18:13
Modified: . CHANGES
server log.c
Log:
Fix some piped log problems: bogus "piped log program '(null)'
failed" messages during restart and problem with the logger
respawning again after Apache is stopped.
PR: 21648, 24805
Revision Changes Path
1.1342 +5 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.1341
retrieving revision 1.1342
diff -u -r1.1341 -r1.1342
--- CHANGES 12 Dec 2003 17:03:58 -0000 1.1341
+++ CHANGES 13 Dec 2003 22:18:13 -0000 1.1342
@@ -2,6 +2,11 @@
[Remove entries to the current 2.0 section below, when backported]
+ *) Fix some piped log problems: bogus "piped log program '(null)'
+ failed" messages during restart and problem with the logger
+ respawning again after Apache is stopped. PR 21648, PR 24805.
+ [Jeff Trawick]
+
*) Add a hook (insert_error_filter) to allow filters to re-insert
themselves during processing of error responses. Enable mod_expires
to use the new hook to include Expires headers in valid error
1.137 +24 -15 httpd-2.0/server/log.c
Index: log.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/log.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -r1.136 -r1.137
--- log.c 24 Nov 2003 21:34:38 -0000 1.136
+++ log.c 13 Dec 2003 22:18:13 -0000 1.137
@@ -91,6 +91,7 @@
#include "http_log.h"
#include "http_main.h"
#include "util_time.h"
+#include "ap_mpm.h"
typedef struct {
char *t_name;
@@ -796,26 +797,34 @@
{
piped_log *pl = data;
apr_status_t stats;
+ int mpm_state;
switch (reason) {
case APR_OC_REASON_DEATH:
case APR_OC_REASON_LOST:
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "piped log program '%s' failed unexpectedly",
- pl->program);
- pl->pid = NULL;
+ pl->pid = NULL; /* in case we don't get it going again, this
+ * tells other logic not to try to kill it
+ */
apr_proc_other_child_unregister(pl);
- if (pl->program == NULL) {
- /* during a restart */
- break;
- }
- if ((stats = piped_log_spawn(pl)) != APR_SUCCESS) {
- /* what can we do? This could be the error log we're having
- * problems opening up... */
- char buf[120];
+ stats = ap_mpm_query(AP_MPMQ_MPM_STATE, &mpm_state);
+ if (stats != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "piped_log_maintenance: unable to respawn '%s': %s",
- pl->program, apr_strerror(stats, buf, sizeof(buf)));
+ "can't query MPM state; not restarting "
+ "piped log program '%s'",
+ pl->program);
+ }
+ else if (mpm_state != AP_MPMQ_STOPPING) {
+ ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
+ "piped log program '%s' failed unexpectedly",
+ pl->program);
+ if ((stats = piped_log_spawn(pl)) != APR_SUCCESS) {
+ /* what can we do? This could be the error log we're having
+ * problems opening up... */
+ char buf[120];
+ ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
+ "piped_log_maintenance: unable to respawn '%s': %s",
+ pl->program, apr_strerror(stats, buf, sizeof(buf)));
+ }
}
break;
@@ -825,9 +834,9 @@
break;
case APR_OC_REASON_RESTART:
- pl->program = NULL;
if (pl->pid != NULL) {
apr_proc_kill(pl->pid, SIGTERM);
+ pl->pid = NULL;
}
break;