mturk 2005/02/06 03:21:38 Modified: jk/native/apache-2.0 mod_jk.c Log: Initialize shared memory and attach in child process. Revision Changes Path 1.118 +57 -1 jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c Index: mod_jk.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c,v retrieving revision 1.117 retrieving revision 1.118 diff -u -r1.117 -r1.118 --- mod_jk.c 6 Feb 2005 09:33:15 -0000 1.117 +++ mod_jk.c 6 Feb 2005 11:21:37 -0000 1.118 @@ -95,6 +95,7 @@ #include "jk_uri_worker_map.h" #include "jk_util.h" #include "jk_worker.h" +#include "jk_shm.h" #define JK_WORKER_ID ("jakarta.worker") #define JK_HANDLER ("jakarta-servlet") @@ -188,6 +189,8 @@ static jk_logger_t *main_log = NULL; static jk_worker_env_t worker_env; static apr_global_mutex_t *jk_log_lock = NULL; +static char *jk_shm_file = NULL; +static jk_shm_t jk_shmem = { 0, NULL, -1, NULL, 0}; static int JK_METHOD ws_start_response(jk_ws_service_t *s, int status, @@ -867,6 +870,23 @@ } /* + * JkShmFile Directive Handling + * + * JkShmFile file + */ + +static const char *jk_set_shm_file(cmd_parms * cmd, + void *dummy, const char *shm_file) +{ + /* we need an absolute path */ + jk_shm_file = ap_server_root_relative(cmd->pool, shm_file); + if (jk_shm_file == NULL) + return "JkShmFile file name invalid"; + + return NULL; +} + +/* * JkLogLevel Directive Handling * * JkLogLevel debug/info/error/emerg @@ -1557,6 +1577,10 @@ */ AP_INIT_TAKE1("JkLogFile", jk_set_log_file, NULL, RSRC_CONF, "Full path to the Jakarta Tomcat module log file"), + + AP_INIT_TAKE1("JkShmFile", jk_set_shm_file, NULL, RSRC_CONF, + "Full path to the Jakarta Tomcat module shared memory file"), + AP_INIT_TAKE1("JkLogLevel", jk_set_log_level, NULL, RSRC_CONF, "The Jakarta Tomcat module log level, can be debug, " "info, error or emerg"), @@ -1642,6 +1666,17 @@ return 0; } +/** Util - cleanup shmem. + */ +apr_status_t jk_cleanup_shmem(void *data) +{ + if (jk_shmem.base) { + jk_shm_close(&jk_shmem); + jk_shmem.base = NULL; + } + return 0; +} + /** Main service method, called to forward a request to tomcat */ static int jk_handler(request_rec * r) @@ -2192,6 +2227,7 @@ jk_server_conf_t *conf; int mpm_threads = 1; apr_status_t rv; + int rc; conf = ap_get_module_config(s->module_config, &jk_module); @@ -2211,6 +2247,16 @@ #endif if (mpm_threads > 0) jk_set_worker_def_cache_size(mpm_threads); + + rc = jk_shm_attach(jk_shm_file, 0, 0, &jk_shmem); + if (JK_IS_DEBUG_LEVEL(conf->log)) + jk_log(conf->log, JK_LOG_DEBUG, "Attached shm:%s with status %d", + jk_shm_file ? jk_shm_file : "memory", rc); + if (!rc) { + apr_pool_cleanup_register(pconf, s, jk_cleanup_shmem, + jk_cleanup_shmem); + } + if (JK_IS_DEBUG_LEVEL(conf->log)) jk_log(conf->log, JK_LOG_DEBUG, "Initialized %s", JK_EXPOSED_VERSION); JK_TRACE_EXIT(conf->log); @@ -2228,9 +2274,19 @@ static void init_jk(apr_pool_t * pconf, jk_server_conf_t * conf, server_rec * s) { + int rc; /* jk_map_t *init_map = NULL; */ jk_map_t *init_map = conf->worker_properties; + rc = jk_shm_open(jk_shm_file, 0, 0, &jk_shmem); + if (JK_IS_DEBUG_LEVEL(conf->log)) + jk_log(conf->log, JK_LOG_DEBUG, "Initialized shm:%s with status %d", + jk_shm_file ? jk_shm_file : "memory", rc); + if (!rc) { + apr_pool_cleanup_register(pconf, s, jk_cleanup_shmem, + jk_cleanup_shmem); + } + if (!uri_worker_map_alloc(&(conf->uw_map), conf->uri_to_context, conf->log)) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]