]> granicus.if.org Git - apache/commitdiff
change the allocation path for the simple MPM's retained data, as a dynamically
authorJeff Trawick <trawick@apache.org>
Wed, 25 Mar 2009 11:23:29 +0000 (11:23 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 25 Mar 2009 11:23:29 +0000 (11:23 +0000)
loadable MPM can't use the rewrite-args hook

(note across the table: the hooker hook has no retcode feedback, so I didn't init
the data there)

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

server/mpm/simple/simple_api.c
server/mpm/simple/simple_core.c
server/mpm/simple/simple_types.h

index d9befb3c968af60945dc61fa41834a1f5e8acb43..b6fb66b115f4cfb909105a4bab57eb7320400d4e 100644 (file)
@@ -131,7 +131,18 @@ simple_pre_config(apr_pool_t * pconf, apr_pool_t * plog, apr_pool_t * ptemp)
 {
     int run_debug;
     apr_status_t rv;
-    simple_core_t *sc = simple_core_get();
+    simple_core_t *sc;
+
+    /* this is our first 'real' entry point, so setup everything here. */
+    rv = simple_core_init_once();
+
+    if (rv) {
+        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
+                     "simple_core_init_once: Fatal Error Encountered");
+        return HTTP_INTERNAL_SERVER_ERROR;
+    }
+
+    sc = simple_core_get();
 
     sc->restart_num++;
 
@@ -165,22 +176,6 @@ simple_pre_config(apr_pool_t * pconf, apr_pool_t * plog, apr_pool_t * ptemp)
     return OK;
 }
 
-static void simple_process_start(process_rec * process)
-{
-    apr_status_t rv;
-
-    /* this is our first 'real' entry point, so setup everything here. */
-    rv = simple_core_init(simple_core_get(), process->pool);
-
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                     "simple_core_init: Fatal Error Encountered");
-        exit(EXIT_FAILURE);
-    }
-
-    ap_mpm_rewrite_args(process);
-}
-
 static int
 simple_check_config(apr_pool_t * p, apr_pool_t * plog,
                     apr_pool_t * ptemp, server_rec * s)
@@ -275,7 +270,7 @@ static const command_rec simple_cmds[] = {
 
 module AP_MODULE_DECLARE_DATA mpm_simple_module = {
     MPM20_MODULE_STUFF,
-    simple_process_start,       /* hook to run before apache parses args */
+    ap_mpm_rewrite_args,        /* hook to run before apache parses args */
     NULL,                       /* create per-directory config structure */
     NULL,                       /* merge per-directory config structures */
     NULL,                       /* create per-server config structure */
index 7a46855693e375d752306adc7959c3d589f6dab9..2fa5adb1727e7297f097b1e6eecc0f67980c1b90 100644 (file)
 #include "ap_mpm.h"
 #include "httpd.h"
 #include "http_log.h"
+#include "http_config.h"
+#include "http_main.h"
 
-static simple_core_t g_simple_core;
+static simple_core_t *g_simple_core;
 
 #ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
 #define DEFAULT_MAX_REQUESTS_PER_CHILD 0
@@ -31,16 +33,23 @@ static simple_core_t g_simple_core;
 
 simple_core_t *simple_core_get()
 {
-    return &g_simple_core;
+    return g_simple_core;
 }
 
-apr_status_t simple_core_init(simple_core_t * sc, apr_pool_t * pool)
+apr_status_t simple_core_init_once(void)
 {
     apr_status_t rv;
+    const char *userdata_key = "mpm_simple_module";
+    simple_core_t *sc;
 
-    memset(sc, 0, sizeof(simple_core_t));
+    g_simple_core = ap_get_retained_data(userdata_key);
+    if (g_simple_core) {
+        return APR_SUCCESS;
+    }
+    
+    sc = g_simple_core = ap_set_retained_data(userdata_key, sizeof(*g_simple_core));
 
-    apr_pool_create(&sc->pool, pool);
+    apr_pool_create(&sc->pool, ap_pglobal);
 
     apr_pool_tag(sc->pool, "simple-mpm-core");
 
@@ -59,7 +68,7 @@ apr_status_t simple_core_init(simple_core_t * sc, apr_pool_t * pool)
 
     if (rv) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                     "simple_core_init: apr_thread_mutex_create failed.");
+                     "simple_core_init_once: apr_thread_mutex_create failed.");
         return rv;
     }
 
index 814165873efea52d436bbed31f45b2d25fcb9862..a71691f5f7ddccf6c75185bf43ee4a8e72a6328b 100644 (file)
@@ -126,7 +126,7 @@ struct simple_conn_t
 
 simple_core_t *simple_core_get(void);
 
-/* Resets all variables to 0 for a simple_core_t */
-apr_status_t simple_core_init(simple_core_t * sc, apr_pool_t * pool);
+/* Allocates/initializes data retained over the life of the process */
+apr_status_t simple_core_init_once(void);
 
 #endif /* APACHE_MPM_SIMPLE_TYPES_H */