]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
When restarting, reset ap_server_config_defines to what was set on the command
authorStefan Fritsch <sf@apache.org>
Wed, 10 Nov 2010 18:03:32 +0000 (18:03 +0000)
committerStefan Fritsch <sf@apache.org>
Wed, 10 Nov 2010 18:03:32 +0000 (18:03 +0000)
line. This makes the result more predictable for the user and resolves some
string lifetime issues in the implementation of set_define/unset_define.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1033619 13f79535-47bb-0310-9956-ffa450edef68

server/core.c

index cf0d6c6750b9402504a0ff752759c71eec516a51..83d75bfd3c1a67979f2b46532b2146b4dd4c4b12 100644 (file)
@@ -104,6 +104,8 @@ AP_DECLARE_DATA int ap_document_root_check = 1;
 /* magic pointer for ErrorDocument xxx "default" */
 static char errordocument_default;
 
+static apr_array_header_t *saved_server_config_defines = NULL;
+
 static void *create_core_dir_config(apr_pool_t *a, char *dir)
 {
     core_dir_config *conf;
@@ -1054,6 +1056,12 @@ static const char *set_access_name(cmd_parms *cmd, void *dummy,
     return NULL;
 }
 
+static int reset_config_defines(void *dummy)
+{
+    ap_server_config_defines = saved_server_config_defines;
+    return OK;
+}
+
 
 static const char *set_define(cmd_parms *cmd, void *dummy,
                               const char *optarg)
@@ -3941,6 +3949,16 @@ static int core_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptem
 {
     ap_mutex_init(pconf);
 
+    /*
+     * Make sure we revert the effects of Define/UnDefine when restarting.
+     * We cannot use apr_array_copy_hdr because it does not protect from the
+     * way unset_define removes entries.
+     */
+    saved_server_config_defines = ap_server_config_defines;
+    ap_server_config_defines = apr_array_copy(pconf, ap_server_config_defines);
+    apr_pool_cleanup_register(pconf, NULL, reset_config_defines,
+                              apr_pool_cleanup_null);
+
     return APR_SUCCESS;
 }