Author: rjung
Date: Sun Sep 30 15:17:48 2007
New Revision: 580800
URL: http://svn.apache.org/viewvc?rev=580800&view=rev
Log:
Clone server config in case a servers share their
config.
Because by default we (unfortunately)
don't inherit mounts between servers, a vhost with
no JK directive needs to become it's own server
config with an empty uw_map.
In this case Apache httpd itself will not call our
config create function and we need to clone the
config ourselves.
The old code simply overwrote uw_map with a new one
and the old one never got freed leading to a memory
leak of 8KB per vhost with no JK directoves.
Modified:
tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c?rev=580800&r1=580799&r2=580800&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c Sun Sep 30 15:17:48
2007
@@ -2243,6 +2243,31 @@
}
+/*
+ * Clone jk config.
+ */
+static void *clone_jk_config(ap_pool * p, server_rec *s)
+{
+ jk_server_conf_t *src =
+ (jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
+ jk_server_conf_t *dst =
+ (jk_server_conf_t *) ap_pcalloc(p, sizeof(jk_server_conf_t));
+
+ memcpy(dst, src, sizeof(jk_server_conf_t));
+ dst->was_initialized = JK_TRUE;
+ dst->s = s;
+ dst->mountcopy = 0;
+ dst->mount_file = NULL;
+ dst->alias_dir = NULL;
+ dst->uri_to_context = NULL;
+ if (!uri_worker_map_alloc(&(dst->uw_map), NULL, dst->log)) {
+ jk_error_exit(APLOG_MARK, APLOG_EMERG, s, p, "Memory error");
+ }
+
+ return dst;
+}
+
+
static void copy_jk_map(ap_pool * p, server_rec * s, jk_map_t *src,
jk_map_t *dst)
{
@@ -2486,7 +2511,11 @@
for (; srv; srv = srv->next) {
jk_server_conf_t *sconf = (jk_server_conf_t
*)ap_get_module_config(srv->module_config,
&jk_module);
- if (sconf && sconf->was_initialized == JK_FALSE) {
+ if (sconf && sconf->was_initialized == JK_TRUE) {
+ ap_set_module_config(srv->module_config, &jk_module,
+ clone_jk_config(p, srv));
+ }
+ else if (sconf && sconf->was_initialized == JK_FALSE) {
sconf->was_initialized = JK_TRUE;
open_jk_log(srv, p);
sconf->options &= ~sconf->exclude_options;
Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?rev=580800&r1=580799&r2=580800&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Sun Sep 30 15:17:48
2007
@@ -2358,6 +2358,31 @@
}
+/** Clone jk config.
+ */
+static void *clone_jk_config(apr_pool_t * p, server_rec *s)
+{
+ jk_server_conf_t *src =
+ (jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
+ jk_server_conf_t *dst =
+ (jk_server_conf_t *) apr_pcalloc(p, sizeof(jk_server_conf_t));
+
+ memcpy(dst, src, sizeof(jk_server_conf_t));
+ dst->was_initialized = JK_TRUE;
+ dst->s = s;
+ dst->mountcopy = 0;
+ dst->mount_file = NULL;
+ dst->alias_dir = NULL;
+ dst->uri_to_context = NULL;
+ if (!uri_worker_map_alloc(&(dst->uw_map), NULL, dst->log)) {
+ jk_error_exit(APLOG_MARK, APLOG_EMERG, s,
+ s->process->pool, "Memory error");
+ }
+
+ return dst;
+}
+
+
/** Utility - copy a map . XXX Should move to jk_map, it's generic code.
*/
static void copy_jk_map(apr_pool_t * p, server_rec * s, jk_map_t *src,
@@ -2773,7 +2798,11 @@
for (; srv; srv = srv->next) {
jk_server_conf_t *sconf = (jk_server_conf_t
*)ap_get_module_config(srv->module_config,
&jk_module);
- if (sconf && sconf->was_initialized == JK_FALSE) {
+ if (sconf && sconf->was_initialized == JK_TRUE) {
+ ap_set_module_config(srv->module_config, &jk_module,
+ clone_jk_config(pconf, srv));
+ }
+ else if (sconf && sconf->was_initialized == JK_FALSE) {
sconf->was_initialized = JK_TRUE;
if (open_jklog(srv, pconf))
return HTTP_INTERNAL_SERVER_ERROR;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]