From: Jeff Trawick Date: Thu, 4 Jan 2001 18:22:50 +0000 (+0000) Subject: Set up stderr logging explictly early in initialization so that a pool is X-Git-Tag: APACHE_2_0_BETA_CANDIDATE_1~277 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a65b522fb9df7f269b7d3255cd8d100312feb9ea;p=apache Set up stderr logging explictly early in initialization so that a pool is available for creating the APR representation of stderr. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87583 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/http_log.h b/include/http_log.h index c35c6d37da..fa8aeb0039 100644 --- a/include/http_log.h +++ b/include/http_log.h @@ -113,6 +113,12 @@ extern "C" { #define APLOG_MARK __FILE__,__LINE__ +/** + * Set up for logging to stderr. + * @param p The pool to allocate out of + */ +void ap_open_stderr_log(apr_pool_t *p); + /** * Open the error log and replace stderr with it. * @param s_main The main server diff --git a/libhttpd.def b/libhttpd.def index 160e61b84a..4b20e0d3f3 100644 --- a/libhttpd.def +++ b/libhttpd.def @@ -418,3 +418,4 @@ EXPORTS ap_xml_insert_uri ap_os_create_privileged_process + ap_open_stderr_log diff --git a/server/log.c b/server/log.c index bd167872cc..30435891c0 100644 --- a/server/log.c +++ b/server/log.c @@ -174,6 +174,13 @@ static const TRANS priorities[] = { {NULL, -1}, }; +static apr_file_t *stderr_log; + +void ap_open_stderr_log(apr_pool_t *p) +{ + apr_open_stderr(&stderr_log, p); +} + static int log_child(apr_pool_t *p, const char *progname, apr_file_t **fpin) { @@ -346,7 +353,7 @@ static void log_error_core(const char *file, int line, int level, if (((level & APLOG_LEVELMASK) != APLOG_NOTICE) && ((level & APLOG_LEVELMASK) > DEFAULT_LOGLEVEL)) return; - apr_open_stderr(&logf, pool); + logf = stderr_log; } else if (s->error_log) { /* diff --git a/server/main.c b/server/main.c index 388face9ab..25eca86492 100644 --- a/server/main.c +++ b/server/main.c @@ -214,6 +214,9 @@ static process_rec *create_process(int argc, const char * const *argv) stat = apr_create_pool(&cntx, NULL); if (stat != APR_SUCCESS) { + /* XXX From the time that we took away the NULL pool->malloc mapping + * we have been unable to log here without segfaulting. + */ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL, "apr_create_pool() failed to create " "initial context"); @@ -221,6 +224,8 @@ static process_rec *create_process(int argc, const char * const *argv) exit(1); } + ap_open_stderr_log(cntx); + process = apr_palloc(cntx, sizeof(process_rec)); process->pool = cntx;