You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2008/04/02 12:43:29 UTC

svn commit: r643838 - /webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c

Author: samisa
Date: Wed Apr  2 03:43:21 2008
New Revision: 643838

URL: http://svn.apache.org/viewvc?rev=643838&view=rev
Log:
Added the local pool and also added the fix to change the place where the worker is created depending on weather are are using shared memory

Modified:
    webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c

Modified: webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c?rev=643838&r1=643837&r2=643838&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c (original)
+++ webservices/axis2/trunk/c/src/core/transport/http/server/apache2/mod_axis2.c Wed Apr  2 03:43:21 2008
@@ -315,6 +315,11 @@
     axutil_env_t *thread_env = NULL;
     axutil_allocator_t *allocator = NULL;
     axutil_error_t *error = NULL;
+    apr_allocator_t *local_allocator = NULL;
+    apr_pool_t *local_pool = NULL;
+
+    apr_allocator_create(&local_allocator);
+    apr_pool_create_ex(&local_pool, NULL, NULL, local_allocator);
 
     if (strcmp(req->handler, "axis2_module"))
     {
@@ -334,7 +339,7 @@
     rv = AXIS2_APACHE2_WORKER_PROCESS_REQUEST(axis2_worker, axutil_env, req);*/
 
     /* create new allocator for this request */
-    allocator = (axutil_allocator_t *) apr_palloc( req->pool,
+    allocator = (axutil_allocator_t *) apr_palloc(local_pool,
                                                   sizeof(axutil_allocator_t));
     if (!allocator)
     {
@@ -343,8 +348,8 @@
     allocator->malloc_fn = axis2_module_malloc;
     allocator->realloc = axis2_module_realloc;
     allocator->free_fn = axis2_module_free;
-    allocator->local_pool = (void *) req->pool;
-    allocator->current_pool = (void *) req->pool;
+    allocator->local_pool = (void *) local_pool;
+    allocator->current_pool = (void *) local_pool;
     allocator->global_pool = axutil_env->allocator->global_pool;
 
     error = axutil_error_create(allocator);
@@ -360,6 +365,9 @@
         return HTTP_INTERNAL_SERVER_ERROR;
     }
 
+    apr_pool_destroy(local_pool);
+    apr_allocator_destroy(local_allocator);
+
     return rv;
 }
 
@@ -508,69 +516,155 @@
 		allocator->local_pool = (void *) rmm;
 		allocator->current_pool = (void *) rmm;
 		allocator->global_pool = (void *) rmm;
+
+        /* We need to init xml readers before we go into threaded env
+         */
+        axiom_xml_reader_init();
+        axutil_error_init();
+
+        error = axutil_error_create(allocator);
+        if (!error)
+        {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error creating mod_axis2 error structure");
+            exit(APEXIT_CHILDFATAL);
+        }
+    	
+        axutil_logger = axutil_log_create(allocator, NULL, conf->axutil_log_file);
+        if (!axutil_logger)
+        {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error creating mod_axis2 log structure");
+            exit(APEXIT_CHILDFATAL);
+        }
+        thread_pool = axutil_thread_pool_init(allocator);
+        if (!thread_pool)
+        {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error initializing mod_axis2 thread pool");
+            exit(APEXIT_CHILDFATAL);
+        }
+        axutil_env = axutil_env_create_with_error_log_thread_pool(allocator, error,
+                                                                  axutil_logger,
+                                                                  thread_pool);
+        if (!axutil_env)
+        {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error creating mod_axis2 environment");
+            exit(APEXIT_CHILDFATAL);
+        }
+        if (axutil_logger)
+        {
+            axutil_logger->level = conf->log_level;
+            axutil_logger->size = conf->max_log_file_size;
+            AXIS2_LOG_INFO(axutil_env->log, "Apache Axis2/C version in use : %s",
+                           axis2_version_string());
+            AXIS2_LOG_INFO(axutil_env->log, 
+                "Starting log with log level %d and max log file size %d",
+                           conf->log_level, conf->max_log_file_size);
+        }
+
+	    axis2_worker = axis2_apache2_worker_create(axutil_env,
+												    conf->axis2_repo_path);
+        if (!axis2_worker)
+        {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error creating mod_axis2 apache2 worker");
+            exit(APEXIT_CHILDFATAL);
+        }
 	}
-	else
+	
 #endif
-    /* create an allocator that uses APR memory pools and lasts the
-     * lifetime of the httpd server child process
-     */
+    
+	return OK;
+}
+
+static void
+axis2_module_init(
+    apr_pool_t * p,
+    server_rec * svr_rec)
+{
+    apr_pool_t *pool;
+    apr_status_t status;
+    axutil_allocator_t *allocator = NULL;
+    axutil_error_t *error = NULL;
+    axutil_log_t *axutil_logger = NULL;
+    axutil_thread_pool_t *thread_pool = NULL;
+    axis2_config_rec_t *conf = (axis2_config_rec_t*)ap_get_module_config(
+                svr_rec->module_config, &axis2_module);
+
+    if (!(conf->axis2_global_pool_size > 0))
 	{
-		apr_pool_t *pool = NULL;
-		status = apr_pool_create(&pool, pconf);
-		if (status)
-		{
-			ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec,
-						 "[Axis2] Error allocating mod_axis2 memory pool");
-			exit(APEXIT_INIT);
-		}
-		allocator = (axutil_allocator_t *) apr_palloc(pool,
-													  sizeof(axutil_allocator_t));
-		if (!allocator)
-		{
-			ap_log_error(APLOG_MARK, APLOG_EMERG, APR_ENOMEM, svr_rec,
-						 "[Axis2] Error allocating mod_axis2 allocator");
-			exit(APEXIT_INIT);
-		}
-		allocator->malloc_fn = axis2_module_malloc;
-		allocator->realloc = axis2_module_realloc;
-		allocator->free_fn = axis2_module_free;
-		allocator->local_pool = (void *) pool;
-		allocator->current_pool = (void *) pool;
-		allocator->global_pool = (void *) pool;
-	}
+        /*
+            If we are using shared memory, no need to init the child, as the 
+            worker has been created in post config.
+        */
+        return;
+    }
 
 
     /* We need to init xml readers before we go into threaded env
      */
     axiom_xml_reader_init();
-    axutil_error_init();
 
+    /* create an allocator that uses APR memory pools and lasts the
+     * lifetime of the httpd server child process
+     */
+    status = apr_pool_create(&pool, p);
+    if (status)
+    {
+        ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec,
+                     "[Axis2] Error allocating mod_axis2 memory pool");
+        exit(APEXIT_CHILDFATAL);
+    }
+    allocator = (axutil_allocator_t*) apr_palloc(pool,
+                                                sizeof(axutil_allocator_t));
+    if (! allocator)
+    {
+        ap_log_error(APLOG_MARK, APLOG_EMERG, APR_ENOMEM, svr_rec,
+                     "[Axis2] Error allocating mod_axis2 allocator");
+        exit(APEXIT_CHILDFATAL);
+    }
+    allocator->malloc_fn = axis2_module_malloc;
+    allocator->realloc = axis2_module_realloc;
+    allocator->free_fn = axis2_module_free;
+    allocator->local_pool = (void*) pool;
+    allocator->current_pool = (void*) pool;
+    allocator->global_pool = (void*) pool;
+
+    if (! allocator)
+    {
+        ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
+                         "[Axis2] Error initializing mod_axis2 allocator");
+        exit(APEXIT_CHILDFATAL);
+    }
+    
+    axutil_error_init();
+    
     error = axutil_error_create(allocator);
-    if (!error)
+    if (! error)
     {
         ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
                      "[Axis2] Error creating mod_axis2 error structure");
         exit(APEXIT_CHILDFATAL);
     }
-	
     axutil_logger = axutil_log_create(allocator, NULL, conf->axutil_log_file);
-    if (!axutil_logger)
+    if (! axutil_logger)
     {
         ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
                      "[Axis2] Error creating mod_axis2 log structure");
         exit(APEXIT_CHILDFATAL);
     }
     thread_pool = axutil_thread_pool_init(allocator);
-    if (!thread_pool)
+    if (! thread_pool)
     {
         ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
                      "[Axis2] Error initializing mod_axis2 thread pool");
         exit(APEXIT_CHILDFATAL);
     }
     axutil_env = axutil_env_create_with_error_log_thread_pool(allocator, error,
-                                                              axutil_logger,
-                                                              thread_pool);
-    if (!axutil_env)
+            axutil_logger, thread_pool);
+    if (! axutil_env)
     {
         ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
                      "[Axis2] Error creating mod_axis2 environment");
@@ -578,31 +672,21 @@
     }
     if (axutil_logger)
     {
+
         axutil_logger->level = conf->log_level;
-        axutil_logger->size = conf->max_log_file_size;
-        AXIS2_LOG_INFO(axutil_env->log, "Apache Axis2/C version in use : %s",
-                       axis2_version_string());
-        AXIS2_LOG_INFO(axutil_env->log, 
-            "Starting log with log level %d and max log file size %d",
-                       conf->log_level, conf->max_log_file_size);
+        AXIS2_LOG_INFO(axutil_env->log, "Apache Axis2/C version in use : %s", 
+            axis2_version_string());
+        AXIS2_LOG_INFO(axutil_env->log, "Starting log with log level %d",
+            conf->log_level);
     }
-
-	axis2_worker = axis2_apache2_worker_create(axutil_env,
-												conf->axis2_repo_path);
-    if (!axis2_worker)
+    axis2_worker = axis2_apache2_worker_create(axutil_env,
+            conf->axis2_repo_path);
+    if (! axis2_worker)
     {
         ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec,
                      "[Axis2] Error creating mod_axis2 apache2 worker");
         exit(APEXIT_CHILDFATAL);
     }
-	return OK;
-}
-
-static void
-axis2_module_init(
-    apr_pool_t * p,
-    server_rec * svr_rec)
-{
 }
 
 static void



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org