]> granicus.if.org Git - apache/commitdiff
Get mod_cgid to work as a DSO by changing the way it
authorJeff Trawick <trawick@apache.org>
Wed, 13 Dec 2000 04:03:19 +0000 (04:03 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 13 Dec 2000 04:03:19 +0000 (04:03 +0000)
keeps track of whether or not its post config hook has
been called before.  Instead of a static variable (which
is replaced when the DSO is loaded a second time), use
userdata in the process pool.

Still to go: mod_file_cache, mod_rewrite

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

modules/generators/mod_cgid.c

index c514ba80bfd96adb6e16f49dc9f2c92e3f7aaa87..5a770e171348e926655275baa94cbeac75b4fc03 100644 (file)
 module AP_MODULE_DECLARE_DATA cgid_module; 
 
 static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server); 
-static int once_through = 0; 
 
 static apr_pool_t *pcgi; 
 
@@ -510,12 +509,15 @@ static int cgid_server(void *data)
     return -1; 
 } 
 
-static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server) 
+static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, 
+                      server_rec *main_server) 
 { 
     pid_t pid; 
     apr_proc_t *procnew;
+    void *data;
 
-    if (once_through > 0) { 
+    apr_get_userdata(&data, "cgid_init", main_server->process->pool);
+    if (data != NULL) {
         apr_create_pool(&pcgi, p); 
 
         if ((pid = fork()) < 0) {
@@ -533,8 +535,11 @@ static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server
 #if APR_HAS_OTHER_CHILD
         apr_register_other_child(procnew, cgid_maint, NULL, NULL, p);
 #endif
-    } 
-    else once_through++; 
+    }
+    else {
+        apr_set_userdata((const void *)1, "cgid_init", apr_null_cleanup,
+                         main_server->process->pool);
+    }
 } 
 
 static void *create_cgid_config(apr_pool_t *p, server_rec *s)