From a381b0e524f4af359f48b098e7a0a025d91c3434 Mon Sep 17 00:00:00 2001 From: "William A. Rowe Jr" Date: Sun, 15 Sep 2002 21:37:32 +0000 Subject: [PATCH] Revisit the code that Ian and I discussed on list. Actually pre-flight the access logs so that failure conditions are noted earlier, and return out of the code using the != OK convention from ap_hook_open_logs. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@96828 13f79535-47bb-0310-9956-ffa450edef68 --- modules/loggers/mod_log_config.c | 42 ++++++++++++-------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/modules/loggers/mod_log_config.c b/modules/loggers/mod_log_config.c index e6b0efbcd4..67500d4127 100644 --- a/modules/loggers/mod_log_config.c +++ b/modules/loggers/mod_log_config.c @@ -1072,22 +1072,6 @@ static config_log_state *open_config_log(server_rec *s, apr_pool_t *p, config_log_state *cls, apr_array_header_t *default_format) { - void *data; - const char *userdata_key = "open_config_log"; - - /* Skip opening the log the first time through. It's really - * good to avoid starting the piped log process during preflight. - */ - apr_pool_userdata_get(&data, userdata_key, s->process->pool); - if (!data) { - apr_pool_userdata_set((const void *)1, userdata_key, - NULL, s->process->pool); - /* If logging for the first time after a restart, keep going. */ - if (!ap_my_generation) { - return cls; - } - } - if (cls->log_writer != NULL) { return cls; /* virtual config shared w/main server */ } @@ -1098,12 +1082,12 @@ static config_log_state *open_config_log(server_rec *s, apr_pool_t *p, cls->log_writer = log_writer_init(p, s, cls->fname); if (cls->log_writer == NULL) - exit(1); + return NULL; return cls; } -static config_log_state *open_multi_logs(server_rec *s, apr_pool_t *p) +int open_multi_logs(server_rec *s, apr_pool_t *p) { int i; multi_log_state *mls = ap_get_module_config(s->module_config, @@ -1135,7 +1119,10 @@ static config_log_state *open_multi_logs(server_rec *s, apr_pool_t *p) } } - cls = open_config_log(s, p, cls, mls->default_format); + if (!open_config_log(s, p, cls, mls->default_format)) { + /* Failure already logged by open_config_log */ + return DONE; + } } } else if (mls->server_config_logs) { @@ -1150,11 +1137,14 @@ static config_log_state *open_multi_logs(server_rec *s, apr_pool_t *p) } } - cls = open_config_log(s, p, cls, mls->default_format); + if (!open_config_log(s, p, cls, mls->default_format)) { + /* Failure already logged by open_config_log */ + return DONE; + } } } - return NULL; + return OK; } @@ -1196,15 +1186,15 @@ static int init_config_log(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt, server /* First, do "physical" server, which gets default log fd and format * for the virtual servers, if they don't override... */ - - open_multi_logs(s, p); + int res = open_multi_logs(s, p); /* Then, virtual servers */ - for (s = s->next; s; s = s->next) { - open_multi_logs(s, p); + for (s = s->next; (res == OK) && s; s = s->next) { + res = open_multi_logs(s, p); } - return OK; + + return res; } static void init_child(apr_pool_t *p, server_rec *s) -- 2.50.1