From e0184da329410a868800ca4cf36b06cd40335fbe Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Mon, 21 Nov 2011 17:36:26 +0000 Subject: [PATCH] Pass ap_errorlog_info to error_log hook. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1204614 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 2 +- docs/manual/developer/new_api_2_4.xml | 2 ++ include/ap_mmn.h | 4 +++- include/http_core.h | 20 ++++++++++++++++++-- include/http_log.h | 20 -------------------- server/log.c | 11 ++++------- 6 files changed, 28 insertions(+), 31 deletions(-) diff --git a/CHANGES b/CHANGES index 9361e96c20..71c32ac409 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,7 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 - *) error log hook: add conn_rec as a parameter. [Jeff Trawick] + *) error log hook: Pass ap_errorlog_info struct. [Stefan Fritsch] [Apache 2.5.0-dev includes those bug fixes and changes with the Apache 2.4.xx tree as documented below, except as noted.] diff --git a/docs/manual/developer/new_api_2_4.xml b/docs/manual/developer/new_api_2_4.xml index 821da87b29..1a19c1955e 100644 --- a/docs/manual/developer/new_api_2_4.xml +++ b/docs/manual/developer/new_api_2_4.xml @@ -127,6 +127,8 @@
  • New function ap_get_server_name_for_url to support ipv6 literals.
  • New function ap_register_errorlog_handler to register errorlog format string handlers.
  • +
  • Arguments of error_log hook have changed. Declaration has moved to + http_core.h.
  • New function ap_state_query to determine if the server is in the initial configuration preflight phase or not. This is both easier to use and more correct than the old method of creating a pool userdata diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 0bed710307..6479a4cb4f 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -368,12 +368,14 @@ * 20111118.0 (2.5.0-dev) Add conn_rec to error_log hook * 20111118.1 (2.5.0-dev) Add reclvl to ap_expr_eval_ctx_t * 20111120.0 (2.5.0-dev) Remove parts of conn_state_t that are private to the MPM + * 20111121.0 (2.5.0-dev) Pass ap_errorlog_info struct to error_log hook, + * add pool to ap_errorlog_info. */ #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ #ifndef MODULE_MAGIC_NUMBER_MAJOR -#define MODULE_MAGIC_NUMBER_MAJOR 20111120 +#define MODULE_MAGIC_NUMBER_MAJOR 20111121 #endif #define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */ diff --git a/include/http_core.h b/include/http_core.h index a6be6fb883..0bac928286 100644 --- a/include/http_core.h +++ b/include/http_core.h @@ -776,14 +776,17 @@ typedef struct ap_errorlog_info { /** r->main if r is a subrequest, otherwise equal to r */ const request_rec *rmain; - /** name of source file where the log message was produced. */ + /** pool passed to ap_log_perror, NULL otherwise */ + apr_pool_t *pool; + + /** name of source file where the log message was produced, NULL if N/A. */ const char *file; /** line number in the source file, 0 if N/A */ int line; /** module index of module that produced the log message, APLOG_NO_MODULE if N/A. */ int module_index; - /** log level of error message, -1 if N/A */ + /** log level of error message (flags like APLOG_STARTUP have been removed), -1 if N/A */ int level; /** apr error status related to the log message, 0 if no error */ @@ -844,6 +847,19 @@ typedef struct { unsigned int min_loglevel; } ap_errorlog_format_item; +/** + * hook method to log error messages + * @ingroup hooks + * @param info pointer to ap_errorlog_info struct which contains all + * the details + * @param errstr message to log (unmodified + * @warning Allocating from the usual pools (pool, info->c->pool, info->p->pool) + * must be avoided because it can cause memory leaks. + * Use a subpool if necessary. + */ +AP_DECLARE_HOOK(void, error_log, (const ap_errorlog_info *info, + const char *errstr)) + AP_CORE_DECLARE(void) ap_register_log_hooks(apr_pool_t *p); AP_CORE_DECLARE(void) ap_register_config_hooks(apr_pool_t *p); diff --git a/include/http_log.h b/include/http_log.h index 038feebd5f..68a6c8f20d 100644 --- a/include/http_log.h +++ b/include/http_log.h @@ -624,26 +624,6 @@ AP_DECLARE(apr_file_t *) ap_piped_log_read_fd(piped_log *pl); */ AP_DECLARE(apr_file_t *) ap_piped_log_write_fd(piped_log *pl); -/** - * hook method to log error messages - * @ingroup hooks - * @param file The file in which this function is called - * @param line The line number on which this function is called - * @param module_index The module_index of the module generating this message - * @param level The level of this error message - * @param status The status code from the previous command - * @param s The server which we are logging for - * @param c The connection which we are logging for - * @param r The request which we are logging for - * @param pool Memory pool to allocate from - * @param errstr message to log - */ -AP_DECLARE_HOOK(void, error_log, (const char *file, int line, - int module_index, int level, - apr_status_t status, const server_rec *s, - const conn_rec *c, const request_rec *r, - apr_pool_t *pool, const char *errstr)) - /** * hook method to generate unique id for connection or request * @ingroup hooks diff --git a/server/log.c b/server/log.c index ac446ffe61..605d75bbea 100644 --- a/server/log.c +++ b/server/log.c @@ -1177,6 +1177,7 @@ static void log_error_core(const char *file, int line, int module_index, info.s = s; info.c = c; + info.pool = pool; info.file = NULL; info.line = 0; info.status = 0; @@ -1268,8 +1269,7 @@ static void log_error_core(const char *file, int line, int module_index, * prefix and suffix. */ errstr[errstr_end] = '\0'; - ap_run_error_log(file, line, module_index, level, status, s, c, r, - pool, errstr + errstr_start); + ap_run_error_log(&info, errstr + errstr_start); } *errstr = '\0'; @@ -1763,11 +1763,8 @@ AP_DECLARE(const char *) ap_parse_log_level(const char *str, int *val) } AP_IMPLEMENT_HOOK_VOID(error_log, - (const char *file, int line, int module_index, int level, - apr_status_t status, const server_rec *s, - const conn_rec *c, const request_rec *r, - apr_pool_t *pool, const char *errstr), (file, line, - module_index, level, status, s, c, r, pool, errstr)) + (const ap_errorlog_info *info, const char *errstr), + (info, errstr)) AP_IMPLEMENT_HOOK_RUN_FIRST(int, generate_log_id, (const conn_rec *c, const request_rec *r, -- 2.40.0