You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2009/10/25 20:06:41 UTC

svn commit: r829631 - in /httpd/mod_fcgid/trunk: CHANGES-FCGID modules/fcgid/fcgid_conf.c modules/fcgid/fcgid_conf.h modules/fcgid/fcgid_pm.h modules/fcgid/fcgid_pm_main.c modules/fcgid/fcgid_pm_unix.c modules/fcgid/fcgid_pm_win.c

Author: trawick
Date: Sun Oct 25 19:06:41 2009
New Revision: 829631

URL: http://svn.apache.org/viewvc?rev=829631&view=rev
Log:
Segregate environment variable settings from other processing options sent
to the process manager to keep the (currently) huge environment variable
information out of shared memory.

2.3.4 failed startup on OS X with its default 4MB shared memory limit; 2.2
didn't have this problem.

Modified:
    httpd/mod_fcgid/trunk/CHANGES-FCGID
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.c
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.h
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm.h
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_main.c
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_unix.c
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_win.c

Modified: httpd/mod_fcgid/trunk/CHANGES-FCGID
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/CHANGES-FCGID?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] (original)
+++ httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] Sun Oct 25 19:06:41 2009
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with mod_fcgid 2.3.5
 
+  *) Fix startup errors creating shared memory in constrained systems, such
+     as OS X in its default configuration.  This is a regression since mod_fcgid
+     2.2.  [Jeff Trawick]
+
   *) Recover from most "Resource temporarily unavailable" errors writing the
      request to the FastCGI application.  These were common with large request
      bodies on Mac OS X and intermittent on Solaris.  PR 48025.  [Jeff Trawick]

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.c?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.c Sun Oct 25 19:06:41 2009
@@ -870,7 +870,7 @@
     return NULL;
 }
 
-static int set_cmd_envvars(fcgid_cmd_options *cmdopts, apr_table_t *envvars)
+static int set_cmd_envvars(fcgid_cmd_env *cmdenv, apr_table_t *envvars)
 {
     const apr_array_header_t *envvars_arr;
     const apr_table_entry_t *envvars_entry;
@@ -888,17 +888,17 @@
             if (envvars_entry[i].key == NULL
                 || envvars_entry[i].key[0] == '\0')
                 break;
-            apr_cpystrn(cmdopts->initenv_key[i], envvars_entry[i].key,
+            apr_cpystrn(cmdenv->initenv_key[i], envvars_entry[i].key,
                         INITENV_KEY_LEN);
-            apr_cpystrn(cmdopts->initenv_val[i], envvars_entry[i].val,
+            apr_cpystrn(cmdenv->initenv_val[i], envvars_entry[i].val,
                         INITENV_VAL_LEN);
         }
         if (i < INITENV_CNT) {
-            cmdopts->initenv_key[i][0] = '\0';
+            cmdenv->initenv_key[i][0] = '\0';
         }
     }
     else {
-        cmdopts->initenv_key[0][0] = '\0';
+        cmdenv->initenv_key[0][0] = '\0';
     }
 
     return overflow;
@@ -917,6 +917,7 @@
     apr_status_t rv;
 
     cmdopts = apr_pcalloc(cmd->pool, sizeof *cmdopts);
+    cmdopts->cmdenv = apr_pcalloc(cmd->pool, sizeof *cmdopts->cmdenv);
 
     cmdopts->busy_timeout = DEFAULT_BUSY_TIMEOUT;
     cmdopts->idle_timeout = DEFAULT_IDLE_TIMEOUT;
@@ -1041,7 +1042,7 @@
                             option);
     }
 
-    if ((overflow = set_cmd_envvars(cmdopts, envvars)) != 0) {
+    if ((overflow = set_cmd_envvars(cmdopts->cmdenv, envvars)) != 0) {
         return apr_psprintf(cmd->pool, "mod_fcgid: environment variable table "
                             "overflow; increase INITENV_CNT in fcgid_pm.h from"
                             " %d to at least %d",
@@ -1054,7 +1055,8 @@
 }
 
 void get_cmd_options(request_rec *r, const char *cmdpath,
-                     fcgid_cmd_options *cmdopts)
+                     fcgid_cmd_options *cmdopts,
+                     fcgid_cmd_env *cmdenv)
 {
     fcgid_server_conf *sconf =
         ap_get_module_config(r->server->module_config, &fcgid_module);
@@ -1065,6 +1067,8 @@
 
     if (cmd_specific) { /* ignore request context configuration */
         *cmdopts = *cmd_specific;
+        *cmdenv = *cmdopts->cmdenv;
+        cmdopts->cmdenv = NULL;
         /* pick up configuration for values that can't be configured
          * on FcgidCmdOptions
          */
@@ -1081,7 +1085,7 @@
     cmdopts->min_class_process_count = sconf->min_class_process_count;
     cmdopts->proc_lifetime = sconf->proc_lifetime;
 
-    if ((overflow = set_cmd_envvars(cmdopts, sconf->default_init_env)) != 0) {
+    if ((overflow = set_cmd_envvars(cmdenv, sconf->default_init_env)) != 0) {
         ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
                       "mod_fcgid: %d environment variables dropped; increase "
                       "INITENV_CNT in fcgid_pm.h from %d to at least %d",
@@ -1089,4 +1093,6 @@
                       INITENV_CNT,
                       INITENV_CNT + overflow);
     }
+
+    cmdopts->cmdenv = NULL;
 }

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.h
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.h?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.h (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_conf.h Sun Oct 25 19:06:41 2009
@@ -129,12 +129,19 @@
 } fcgid_dir_conf;
 
 /* processing options which are sent to the PM with a spawn request
- * and/or configurable via FCGIDCmdOptions
+ * and/or configurable via FCGIDCmdOptions; envvars are kept in a
+ * separate structure to keep them out of the process table in order
+ * to limit shared memory use
  */
 #define INITENV_KEY_LEN 64
 #define INITENV_VAL_LEN 128
 #define INITENV_CNT 64
 typedef struct {
+    char initenv_key[INITENV_CNT][INITENV_KEY_LEN];
+    char initenv_val[INITENV_CNT][INITENV_VAL_LEN];
+} fcgid_cmd_env;
+
+typedef struct {
     int busy_timeout;
     int idle_timeout;
     int ipc_comm_timeout;
@@ -143,8 +150,7 @@
     int max_requests_per_process;
     int min_class_process_count;
     int proc_lifetime;
-    char initenv_key[INITENV_CNT][INITENV_KEY_LEN];
-    char initenv_val[INITENV_CNT][INITENV_VAL_LEN];
+    fcgid_cmd_env *cmdenv;
 } fcgid_cmd_options;
 
 void *create_fcgid_server_config(apr_pool_t * p, server_rec * s);
@@ -253,7 +259,7 @@
                             const char *arg);
 
 void get_cmd_options(request_rec *r, const char *cmdpath,
-                     fcgid_cmd_options *cmdopts);
+                     fcgid_cmd_options *cmdopts, fcgid_cmd_env *cmdenv);
 
 AP_MODULE_DECLARE_DATA extern module fcgid_module;
 

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm.h
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm.h?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm.h (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm.h Sun Oct 25 19:06:41 2009
@@ -30,7 +30,10 @@
     uid_t uid;                  /* For suEXEC */
     gid_t gid;                  /* For suEXEC */
     int userdir;                /* For suEXEC */
-    fcgid_cmd_options cmdopts;  /* context-specific configuration */
+    fcgid_cmd_options cmdopts;  /* context-specific configuration, other than
+                                 * envvars
+                                 */
+    fcgid_cmd_env cmdenv;       /* start the command with these env settings */
 } fcgid_command;
 
 void procmgr_init_spawn_cmd(fcgid_command * command, request_rec * r,

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_main.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_main.c?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_main.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_main.c Sun Oct 25 19:06:41 2009
@@ -524,10 +524,10 @@
      */
     default_proc_env(procinfo.proc_environ);        
     for (i = 0; i < INITENV_CNT; i++) {
-        if (command->cmdopts.initenv_key[i][0] == '\0')
+        if (command->cmdenv.initenv_key[i][0] == '\0')
             break;
-        apr_table_set(procinfo.proc_environ, command->cmdopts.initenv_key[i],
-                      command->cmdopts.initenv_val[i]);
+        apr_table_set(procinfo.proc_environ, command->cmdenv.initenv_key[i],
+                      command->cmdenv.initenv_val[i]);
     }
 
     /* Spawn the process now */

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_unix.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_unix.c?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_unix.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_unix.c Sun Oct 25 19:06:41 2009
@@ -423,7 +423,7 @@
         cmd_to_spawn = command->cgipath;
     }
 
-    get_cmd_options(r, cmd_to_spawn, &command->cmdopts);
+    get_cmd_options(r, cmd_to_spawn, &command->cmdopts, &command->cmdenv);
 }
 
 apr_status_t procmgr_post_spawn_cmd(fcgid_command * command,

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_win.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_win.c?rev=829631&r1=829630&r2=829631&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_win.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_pm_win.c Sun Oct 25 19:06:41 2009
@@ -152,7 +152,7 @@
         cmd_to_spawn = command->cgipath;
     }
 
-    get_cmd_options(r, cmd_to_spawn, &command->cmdopts);
+    get_cmd_options(r, cmd_to_spawn, &command->cmdopts, &command->cmdenv);
 }
 
 apr_status_t procmgr_post_spawn_cmd(fcgid_command * command,