You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by do...@hyperreal.org on 1999/05/07 02:16:14 UTC
cvs commit: apache-1.3/src/main http_config.c http_core.c
dougm 99/05/06 17:16:13
Modified: src CHANGES
src/include ap_compat.h ap_mmn.h http_config.h http_core.h
src/main http_config.c http_core.c
Log:
Fix configuration engine re-entrant hangups, which solve a
handful of problems seen with mod_perl <Perl> configuration sections
Submitted by: Salvador Ortiz Garcia <so...@msg.com.mx>
Reviewed by: Doug, Dean
Revision Changes Path
1.1351 +4 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.1350
retrieving revision 1.1351
diff -u -r1.1350 -r1.1351
--- CHANGES 1999/05/06 00:49:38 1.1350
+++ CHANGES 1999/05/07 00:16:06 1.1351
@@ -1,5 +1,9 @@
Changes with Apache 1.3.7
+ *) Fix configuration engine re-entrant hangups, which solve a
+ handful of problems seen with mod_perl <Perl> configuration sections
+ [Salvador Ortiz Garcia <so...@msg.com.mx>]
+
*) Mac OS and Mac OS X Server now use the appropriate custom layout
by default when building with APACI; allow for platform-specific
variable defaults in configure. [Wilfredo Sanchez]
1.17 +2 -0 apache-1.3/src/include/ap_compat.h
Index: ap_compat.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/ap_compat.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- ap_compat.h 1999/01/28 09:24:58 1.16
+++ ap_compat.h 1999/05/07 00:16:09 1.17
@@ -23,6 +23,7 @@
#define acquire_mutex ap_acquire_mutex
#define add_cgi_vars ap_add_cgi_vars
#define add_common_vars ap_add_common_vars
+#define add_file_conf ap_add_file_conf
#define add_module ap_add_module
#define add_named_module ap_add_named_module
#define add_per_dir_conf ap_add_per_dir_conf
@@ -350,6 +351,7 @@
#define server_root_relative ap_server_root_relative
#define set_byterange ap_set_byterange
#define set_callback_and_alarm ap_set_callback_and_alarm
+#define set_config_vectors ap_set_config_vectors
#define set_content_length ap_set_content_length
#define set_etag ap_set_etag
#define set_file_slot ap_set_file_slot
1.34 +3 -1 apache-1.3/src/include/ap_mmn.h
Index: ap_mmn.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/ap_mmn.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- ap_mmn.h 1999/04/20 17:51:37 1.33
+++ ap_mmn.h 1999/05/07 00:16:09 1.34
@@ -215,6 +215,8 @@
* 19990108.7 - ap_isxdigit added
* 19990320 - METHODS and M_INVALID symbol values modified
* 19990320.1 - add ap_vrprintf()
+ * 19990320.2 - add cmd_parms.context, ap_set_config_vectors,
+ * export ap_add_file_conf
*/
#define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */
@@ -222,7 +224,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 19990320
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */
#define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR /* backward compat */
/* Useful for testing for features. */
1.102 +3 -0 apache-1.3/src/include/http_config.h
Index: http_config.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/http_config.h,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- http_config.h 1999/03/10 10:34:08 1.101
+++ http_config.h 1999/05/07 00:16:10 1.102
@@ -170,6 +170,8 @@
*/
const command_rec *cmd; /* configuration command */
const char *end_token; /* end token required to end a nested section */
+ void *context; /* per_dir_config vector passed
+ * to handle_command */
} cmd_parms;
/* This structure records the existence of handlers in a module... */
@@ -400,6 +402,7 @@
CORE_EXPORT(const command_rec *) ap_find_command(const char *name, const command_rec *cmds);
CORE_EXPORT(const command_rec *) ap_find_command_in_modules(const char *cmd_name, module **mod);
+CORE_EXPORT(void *) ap_set_config_vectors(cmd_parms *parms, void *config, module *mod);
CORE_EXPORT(const char *) ap_handle_command(cmd_parms *parms, void *config, const char *l);
#endif
1.57 +1 -0 apache-1.3/src/include/http_core.h
Index: http_core.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/http_core.h,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- http_core.h 1999/04/28 08:35:08 1.56
+++ http_core.h 1999/05/07 00:16:10 1.57
@@ -293,6 +293,7 @@
/* for mod_perl */
CORE_EXPORT(void) ap_add_per_dir_conf (server_rec *s, void *dir_config);
CORE_EXPORT(void) ap_add_per_url_conf (server_rec *s, void *url_config);
+CORE_EXPORT(void) ap_add_file_conf(core_dir_config *conf, void *url_config);
CORE_EXPORT_NONSTD(const char *) ap_limit_section (cmd_parms *cmd, void *dummy, const char *arg);
#endif
1.145 +22 -14 apache-1.3/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_config.c,v
retrieving revision 1.144
retrieving revision 1.145
diff -u -r1.144 -r1.145
--- http_config.c 1999/05/04 11:21:10 1.144
+++ http_config.c 1999/05/07 00:16:11 1.145
@@ -960,8 +960,26 @@
return NULL;
}
+CORE_EXPORT(void *) ap_set_config_vectors(cmd_parms *parms, void *config, module *mod)
+{
+ void *mconfig = ap_get_module_config(config, mod);
+ void *sconfig = ap_get_module_config(parms->server->module_config, mod);
+
+ if (!mconfig && mod->create_dir_config) {
+ mconfig = (*mod->create_dir_config) (parms->pool, parms->path);
+ ap_set_module_config(config, mod, mconfig);
+ }
+
+ if (!sconfig && mod->create_server_config) {
+ sconfig = (*mod->create_server_config) (parms->pool, parms->server);
+ ap_set_module_config(parms->server->module_config, mod, sconfig);
+ }
+ return mconfig;
+}
+
CORE_EXPORT(const char *) ap_handle_command(cmd_parms *parms, void *config, const char *l)
{
+ void *oldconfig;
const char *args, *cmd_name, *retval;
const command_rec *cmd;
module *mod = top_module;
@@ -974,6 +992,8 @@
if (*cmd_name == '\0')
return NULL;
+ oldconfig = parms->context;
+ parms->context = config;
do {
if (!(cmd = ap_find_command_in_modules(cmd_name, &mod))) {
errno = EINVAL;
@@ -982,25 +1002,13 @@
"not included in the server configuration", NULL);
}
else {
- void *mconfig = ap_get_module_config(config, mod);
- void *sconfig =
- ap_get_module_config(parms->server->module_config, mod);
-
- if (!mconfig && mod->create_dir_config) {
- mconfig = (*mod->create_dir_config) (parms->pool, parms->path);
- ap_set_module_config(config, mod, mconfig);
- }
-
- if (!sconfig && mod->create_server_config) {
- sconfig =
- (*mod->create_server_config) (parms->pool, parms->server);
- ap_set_module_config(parms->server->module_config, mod, sconfig);
- }
+ void *mconfig = ap_set_config_vectors(parms,config, mod);
retval = invoke_cmd(cmd, parms, mconfig, args);
mod = mod->next; /* Next time around, skip this one */
}
} while (retval && !strcmp(retval, DECLINE_CMD));
+ parms->context = oldconfig;
return retval;
}
1.261 +2 -2 apache-1.3/src/main/http_core.c
Index: http_core.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_core.c,v
retrieving revision 1.260
retrieving revision 1.261
diff -u -r1.260 -r1.261
--- http_core.c 1999/04/28 08:35:31 1.260
+++ http_core.c 1999/05/07 00:16:12 1.261
@@ -340,7 +340,7 @@
*new_space = url_config;
}
-static void add_file_conf(core_dir_config *conf, void *url_config)
+CORE_EXPORT(void) ap_add_file_conf(core_dir_config *conf, void *url_config)
{
void **new_space = (void **)ap_push_array(conf->sec);
@@ -1545,7 +1545,7 @@
conf->d_is_fnmatch = ap_is_fnmatch(conf->d) != 0;
conf->r = r;
- add_file_conf(c, new_file_conf);
+ ap_add_file_conf(c, new_file_conf);
if (*arg != '\0') {
return ap_pstrcat(cmd->pool, "Multiple ", thiscmd->name,