]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Pass ap_errorlog_info to error_log hook.
authorStefan Fritsch <sf@apache.org>
Mon, 21 Nov 2011 17:36:26 +0000 (17:36 +0000)
committerStefan Fritsch <sf@apache.org>
Mon, 21 Nov 2011 17:36:26 +0000 (17:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1204614 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/developer/new_api_2_4.xml
include/ap_mmn.h
include/http_core.h
include/http_log.h
server/log.c

diff --git a/CHANGES b/CHANGES
index 9361e96c2020097644f4987f846d7e8eccc4c2c4..71c32ac409737c94a5197f8644fc9e5ed8e25ecb 100644 (file)
--- 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.]
index 821da87b290a75cdd0ec0886d3558eac81c8be65..1a19c1955e7218d8f05ecf15c10024adbe38a528 100644 (file)
       <li>New function ap_get_server_name_for_url to support ipv6 literals.</li>
       <li>New function ap_register_errorlog_handler to register errorlog
           format string handlers.</li>
+      <li>Arguments of error_log hook have changed. Declaration has moved to
+          <code>http_core.h</code>.</li>
       <li>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
index 0bed710307456200d311e6c4511adbdf3a64f6dd..6479a4cb4f204f33c63c97ff45874b1757cbf7d5 100644 (file)
  * 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 */
 
index a6be6fb883fce836dc0f322bbb0907582b3fbb0e..0bac9282861233dd2f83199789b7234d8b84b3a6 100644 (file)
@@ -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);
 
index 038feebd5fcf001b74f14c62f6a5146211c0be70..68a6c8f20dd8bc4a72b47abdea100ebd408743ab 100644 (file)
@@ -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
index ac446ffe6117d9374a52d23b381f4f85454e8140..605d75bbeabb0b2cba9651fa7b2e564bdc6bcf9c 100644 (file)
@@ -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,