You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "William A. Rowe, Jr." <wr...@lnd.com> on 2000/05/22 20:37:11 UTC

RE: Platform Specific MPM Design Questions

Ok... time for a different direction.

main_win32 is a joke in the context of MPM's.  Service control and the
MPM layer (should be) entirely intertwined, and the existing http_main
won't quite let me do this...

I would like to propose a change to register_hooks (better named
register_module?) since it occurs only once in the process (correct?)
I'd like to pass the process_rec *process from http_main through to
the register_hooks, to accomplish the following:

1) If this is the Win32 mpm, we need two arguments, -k and -n, which
   could be extracted from the argv/argc list, with the clean list
   retained for command argument parsing.  No special mpm arg_hook
   is required for alien arguments.

2) If this is a WinNT service, something very odd needs to happen.

   On pass one, the Service Control Manager is invoked with Apache's
   main() function all over again.  The original main() code path
   never finishes, this is the end of it's life.  This will now be
   invoked by an internal -k runservice flag, rather than console 
   session tests.

   On the second pass, we replace argv[0] with the true argv[0]
   (since it is passed the service name by the SCM, rather than the
   executable name), and we insert -f and -d args from the Win32 
   service control registry.  (These CAN be overriden, however,
   when starting the service.)

This is the end of my cross-platform request... the Win32 specifics...

Everything else I am looking to move into the MPM can happen in the
ap_run_pre_config or ap_post_config_hook phase (depending). 

ap_run_pre_config phase will handle:

   -n servicename -k stop       {we don't care if the config is valid}
   -n servicename -k uninstall  {we really don't care if the config is valid :-}

ap_post_config_hook phase will handle:

   -n servicename -k runservice {internal Win9x only: show the fools their errors}
   -n servicename -k restart    {no sense in restarting if the config has errors}
   -n servicename -k start      {error out if trying to launch with new errors on WinNT}
   -n servicename -k install    {be sure the config is valid, at least at the moment :-)
   and process termination hooks for ^C/Close Window/Stop Service/Shutdown etc...

Yes - I'm trying to do away with the -i/-u oddballs, although we can depreciate
and keep them (with a warning) for now.

I've spent many hours staring at these code paths... I agree it's a hack, but
I need the environment prior to the command line parsing, before much is 
initialized (since the NT service will loop).  But I think all would like to
see every platform run with the same process sequence.  I'm open to any
alternative suggestions.

Bill

ps - where did -D directive parsing go?

RE: Platform Specific MPM Design Questions

Posted by "William A. Rowe, Jr." <wr...@lnd.com>.
> From: rbb@covalent.net [mailto:rbb@covalent.net]
> Sent: Tuesday, May 23, 2000 3:13 AM
> 
> Please wait until tomorrow or Thursday to commit.  I need to 
> think about
> this patch, and I don't have time to devote mental cycles today.
> 

I was planning on waiting till Friday, since it requires some
time to let everyone bash it :-)

> On Tue, 23 May 2000, William A. Rowe, Jr. wrote:
> 
> > > From: William A. Rowe, Jr. [mailto:wrowe@lnd.com]
> > > Sent: Monday, May 22, 2000 1:37 PM
> > >
> > > I would like to propose a change to register_hooks (better named
> > > register_module?) since it occurs only once in the 
> process (correct?)
> > > I'd like to pass the process_rec *process from http_main 
> through to
> > > the register_hooks
> > 
> > Here is the patch I would like to commit... it only cleans up the
> > const'ness of argv and adds the process_rec * arg to the 
> register_hooks
> > process.  Major or minor version bump is required as well (?)
> > 
> > Feedback anyone?
> > 
> > 
> > 
> 

RE: Platform Specific MPM Design Questions

Posted by rb...@covalent.net.
Please wait until tomorrow or Thursday to commit.  I need to think about
this patch, and I don't have time to devote mental cycles today.

Ryan

On Tue, 23 May 2000, William A. Rowe, Jr. wrote:

> > From: William A. Rowe, Jr. [mailto:wrowe@lnd.com]
> > Sent: Monday, May 22, 2000 1:37 PM
> >
> > I would like to propose a change to register_hooks (better named
> > register_module?) since it occurs only once in the process (correct?)
> > I'd like to pass the process_rec *process from http_main through to
> > the register_hooks
> 
> Here is the patch I would like to commit... it only cleans up the
> const'ness of argv and adds the process_rec * arg to the register_hooks
> process.  Major or minor version bump is required as well (?)
> 
> Feedback anyone?
> 
> 
> 


RE: Platform Specific MPM Design Questions

Posted by "William A. Rowe, Jr." <wr...@lnd.com>.
> From: William A. Rowe, Jr. [mailto:wrowe@lnd.com]
> Sent: Monday, May 22, 2000 1:37 PM
>
> I would like to propose a change to register_hooks (better named
> register_module?) since it occurs only once in the process (correct?)
> I'd like to pass the process_rec *process from http_main through to
> the register_hooks

Here is the patch I would like to commit... it only cleans up the
const'ness of argv and adds the process_rec * arg to the register_hooks
process.  Major or minor version bump is required as well (?)

Feedback anyone?




Index: src/include/http_config.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/include/http_config.h,v
retrieving revision 1.21
diff -u -r1.21 http_config.h
--- src/include/http_config.h	2000/05/18 00:45:05	1.21
+++ src/include/http_config.h	2000/05/23 13:36:45
@@ -247,7 +247,7 @@
      *                  sets content_type, _encoding and _language fields.
      */

-    void (*register_hooks) (void);
+    void (*register_hooks) (process_rec *p);
 } module;

 /* Initializer for the first few module slots, which are only
@@ -307,12 +307,12 @@

 /* Finally, the hook for dynamically loading modules in... */

-API_EXPORT(void) ap_add_module(module *m);
+API_EXPORT(void) ap_add_module(process_rec *p, module *m);
 API_EXPORT(void) ap_remove_module(module *m);
-API_EXPORT(void) ap_add_loaded_module(module *mod);
+API_EXPORT(void) ap_add_loaded_module(process_rec *p, module *mod);
 API_EXPORT(void) ap_remove_loaded_module(module *mod);
-API_EXPORT(int) ap_add_named_module(const char *name);
-API_EXPORT(void) ap_clear_module_list(void);
+API_EXPORT(int) ap_add_named_module(process_rec *p, const char *name);
+API_EXPORT(void) ap_clear_module_list(process_rec *p);
 API_EXPORT(const char *) ap_find_module_name(module *m);
 API_EXPORT(module *) ap_find_linked_module(const char *name);

@@ -384,7 +384,7 @@
 void ap_child_init_hook(ap_pool_t *pchild, server_rec *s);
 void ap_run_pre_config(ap_pool_t *p, ap_pool_t *plog, ap_pool_t *ptemp);

-void ap_register_hooks(module *m);
+void ap_register_hooks(process_rec *p, module *m);

 /* For http_request.c... */

Index: src/lib/apr/include/apr_getopt.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_getopt.h,v
retrieving revision 1.8
diff -u -r1.8 apr_getopt.h
--- src/lib/apr/include/apr_getopt.h	2000/04/16 04:46:54	1.8
+++ src/lib/apr/include/apr_getopt.h	2000/05/23 13:36:57
@@ -60,7 +60,7 @@
     ap_optind,                          /* index into parent argv vector */
     ap_optopt,                          /* character checked for validity */
     ap_optreset;                        /* reset getopt */
-API_VAR_IMPORT char *
+API_VAR_IMPORT const char *
     ap_optarg;                          /* argument associated with option */

 /*
@@ -87,7 +87,7 @@

 =cut
  */
-ap_status_t ap_getopt(ap_int32_t nargc, char *const *nargv, const char *ostr,
+ap_status_t ap_getopt(ap_int32_t nargc, char const* const* nargv, const char *ostr,
                       ap_int32_t *rv, ap_pool_t *cont);

 #endif  /* ! APR_GETOPT_H */
Index: src/lib/apr/misc/unix/getopt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/unix/getopt.c,v
retrieving revision 1.11
diff -u -r1.11 getopt.c
--- src/lib/apr/misc/unix/getopt.c	2000/05/17 22:30:50	1.11
+++ src/lib/apr/misc/unix/getopt.c	2000/05/23 13:37:02
@@ -34,18 +34,18 @@
 #include "misc.h"

 API_VAR_EXPORT int
-    ap_opterr = 1,                      /* if error message should be printed */
-    ap_optind = 1,                      /* index into parent argv vector */
-    ap_optopt,                          /* character checked for validity */
-    ap_optreset;                        /* reset getopt */
-API_VAR_EXPORT char *ap_optarg = "";    /* argument associated with option */
+    ap_opterr = 1,                   /* if error message should be printed */
+    ap_optind = 1,                   /* index into parent argv vector */
+    ap_optopt,                       /* character checked for validity */
+    ap_optreset;                     /* reset getopt */
+API_VAR_EXPORT const char *ap_optarg = ""; /* arg associated with option */

 #define EMSG    ""

-ap_status_t ap_getopt(ap_int32_t nargc, char *const *nargv, const char *ostr, ap_int32_t *rv, ap_pool_t *cont)
+ap_status_t ap_getopt(ap_int32_t nargc, char const* const* nargv, const char *ostr, ap_int32_t *rv, ap_pool_t *cont)
 {
-    char *p;
-    static char *place = EMSG;   /* option letter processing */
+    const char *p;
+    static const char* place = EMSG;   /* option letter processing */
     char *oli;                   /* option letter list index */

     if (ap_optreset || !*place) {   /* update scanning pointer */
Index: src/main/http_config.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_config.c,v
retrieving revision 1.49
diff -u -r1.49 http_config.c
--- src/main/http_config.c	2000/05/22 02:57:44	1.49
+++ src/main/http_config.c	2000/05/23 13:37:16
@@ -359,7 +359,7 @@
 int g_bDebugHooks;
 const char *g_szCurrentHookName;

-void ap_register_hooks(module *m)
+void ap_register_hooks(process_rec *p, module *m)
     {
     if(m->register_hooks)
 	{
@@ -369,13 +369,13 @@
 	    g_bDebugHooks=1;
 	    }
 	g_szCurrentHookName=m->name;
-	m->register_hooks();
+	m->register_hooks(p);
 	}
     }

 /* One-time setup for precompiled modules --- NOT to be done on restart */

-API_EXPORT(void) ap_add_module(module *m)
+API_EXPORT(void) ap_add_module(process_rec *p, module *m)
 {
     /* This could be called from an AddModule httpd.conf command,
      * after the file has been linked and the module structure within it
@@ -414,10 +414,7 @@
      * components (Unix and DOS), and remove them.
      */

-    if (strrchr(m->name, '/'))
-	m->name = 1 + strrchr(m->name, '/');
-    if (strrchr(m->name, '\\'))
-	m->name = 1 + strrchr(m->name, '\\');
+    m->name = ap_filename_of_pathname(m->name);

 #ifdef _OSD_POSIX /* __FILE__="*POSIX(/home/martin/apache/src/modules/standard/mod_info.c)" */
     /* We cannot fix the string in-place, because it's const */
@@ -429,7 +426,7 @@
 #endif /*_OSD_POSIX*/

     /* FIXME: is this the right place to call this? */
-    ap_register_hooks(m);
+    ap_register_hooks(p, m);
 }

 /*
@@ -475,14 +472,14 @@
     total_modules--;
 }

-API_EXPORT(void) ap_add_loaded_module(module *mod)
+API_EXPORT(void) ap_add_loaded_module(process_rec *p, module *mod)
 {
     module **m;

     /*
      *  Add module pointer to top of chained module list
      */
-    ap_add_module(mod);
+    ap_add_module(p, mod);

     /*
      *  And module pointer to list of loaded modules
@@ -556,7 +553,7 @@
      *   Initialize chain of linked (=activate) modules
      */
     for (m = ap_prelinked_modules; *m != NULL; m++)
-        ap_add_module(*m);
+        ap_add_module(process, *m);

     ap_sort_hooks();
 }
@@ -578,7 +575,7 @@
 }

 /* Add a named module.  Returns 1 if module found, 0 otherwise.  */
-API_EXPORT(int) ap_add_named_module(const char *name)
+API_EXPORT(int) ap_add_named_module(process_rec *p, const char *name)
 {
     module *modp;
     int i = 0;
@@ -587,7 +584,7 @@
 	if (strcmp(modp->name, name) == 0) {
 	    /* Only add modules that are not already enabled.  */
 	    if (modp->next == NULL) {
-		ap_add_module(modp);
+		ap_add_module(p, modp);
 	    }
 	    return 1;
 	}
@@ -597,7 +594,7 @@
 }

 /* Clear the internal list of modules, in preparation for starting over. */
-API_EXPORT(void) ap_clear_module_list()
+API_EXPORT(void) ap_clear_module_list(process_rec *p)
 {
     module **m = &top_module;
     module **next_m;
@@ -609,7 +606,7 @@
     }

     /* This is required; so we add it always.  */
-    ap_add_named_module("http_core.c");
+    ap_add_named_module(p, "http_core.c");
 }

 /*****************************************************************
Index: src/main/http_core.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_core.c,v
retrieving revision 1.59
diff -u -r1.59 http_core.c
--- src/main/http_core.c	2000/05/18 19:54:44	1.59
+++ src/main/http_core.c	2000/05/23 13:37:16
@@ -1694,7 +1694,7 @@
         return err;
     }

-    if (!ap_add_named_module(arg)) {
+    if (!ap_add_named_module(cmd->server->process, arg)) {
 	return ap_pstrcat(cmd->pool, "Cannot add module via name '", arg,
 			  "': not in list of loaded modules", NULL);
     }
@@ -1709,7 +1709,7 @@
         return err;
     }

-    ap_clear_module_list();
+    ap_clear_module_list(cmd->server->process);
     *(ap_directive_t **)dummy = NULL;
     return NULL;
 }
@@ -2538,7 +2538,7 @@
 static unsigned short core_port(const request_rec *r)
     { return DEFAULT_HTTP_PORT; }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_translate_name(core_translate,NULL,NULL,AP_HOOK_REALLY_LAST);
     ap_hook_process_connection(ap_process_http_connection,NULL,NULL,
Index: src/main/http_main.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_main.c,v
retrieving revision 1.46
diff -u -r1.46 http_main.c
--- src/main/http_main.c	2000/05/18 19:56:16	1.46
+++ src/main/http_main.c	2000/05/23 13:37:16
@@ -245,9 +245,8 @@
 #endif
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-C \"directive\"] [-c \"directive\"]", pad);
 #ifdef WIN32
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-k restart|shutdown|start]", pad);
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-n service_name]", pad);
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-i] [-u]", pad);
+    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-n \"service_name\"]", pad);
+    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-k start|restart|shutdown|install|uninstall]",
pad);
 #endif
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "       %s [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T]", pad);
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "Options:");
@@ -260,12 +259,12 @@
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -C \"directive\"   : process directive before reading
config files");
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -c \"directive\"   : process directive after  reading
config files");
 #ifdef WIN32
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -n name          : set service name and use its
ServerConfigFile");
+    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -n \"name\"        : specify the service name");
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -k shutdown      : tell running Apache to shutdown");
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -k restart       : tell running Apache to do a graceful
restart");
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -k start         : tell Apache to start");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -i               : install an Apache service");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -u               : uninstall an Apache service");
+    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -k install       : install an Apache service");
+    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -k uninstall     : uninstall an Apache service");
 #endif
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -v               : show version number");
     ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "  -V               : show compile settings");
@@ -326,7 +325,7 @@
     ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *));
     ap_server_config_defines   = ap_make_array(pcommands, 1, sizeof(char *));

-    while (ap_getopt(argc, argv, "C:c:d:f:k:vVlLth", &c, pcommands) == APR_SUCCESS) {
+    while (ap_getopt(process->argc, process->argv, "c:C:d:f:vVlLth?", &c, pcommands) == APR_SUCCESS) {
         char **new;
         switch (c) {
  	case 'c':
@@ -390,7 +389,7 @@
 	ap_hook_deregister_all();
 	ap_clear_pool(pconf);
 	for (mod = ap_prelinked_modules; *mod != NULL; mod++) {
-		ap_register_hooks(*mod);
+		ap_register_hooks(process, *mod);
 	}
 	ap_create_pool(&ptemp, pconf);
 	ap_server_root = def_server_root;
Index: src/modules/standard/mod_access.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_access.c,v
retrieving revision 1.10
diff -u -r1.10 mod_access.c
--- src/modules/standard/mod_access.c	2000/04/26 07:14:36	1.10
+++ src/modules/standard/mod_access.c	2000/05/23 13:37:44
@@ -390,7 +390,7 @@
     return ret;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_access_checker(check_dir_access,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_alias.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_alias.c,v
retrieving revision 1.9
diff -u -r1.9 mod_alias.c
--- src/modules/standard/mod_alias.c	2000/04/26 07:14:36	1.9
+++ src/modules/standard/mod_alias.c	2000/05/23 13:37:48
@@ -397,7 +397,7 @@
     return DECLINED;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     static const char * const aszPre[]={ "mod_userdir.c",NULL };

Index: src/modules/standard/mod_auth.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_auth.c,v
retrieving revision 1.17
diff -u -r1.17 mod_auth.c
--- src/modules/standard/mod_auth.c	2000/04/26 07:14:36	1.17
+++ src/modules/standard/mod_auth.c	2000/05/23 13:37:51
@@ -315,7 +315,7 @@
     return AUTH_REQUIRED;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_check_user_id(authenticate_basic_user,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_auth_checker(check_user_access,NULL,NULL,AP_HOOK_MIDDLE);
Index: src/modules/standard/mod_auth_anon.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_auth_anon.c,v
retrieving revision 1.12
diff -u -r1.12 mod_auth_anon.c
--- src/modules/standard/mod_auth_anon.c	2000/04/26 07:14:37	1.12
+++ src/modules/standard/mod_auth_anon.c	2000/05/23 13:37:52
@@ -289,7 +289,7 @@
 #endif
     return DECLINED;
 }
-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_check_user_id(anon_authenticate_basic_user,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_auth_checker(check_anon_access,NULL,NULL,AP_HOOK_MIDDLE);
Index: src/modules/standard/mod_auth_digest.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_auth_digest.c,v
retrieving revision 1.14
diff -u -r1.14 mod_auth_digest.c
--- src/modules/standard/mod_auth_digest.c	2000/04/29 16:00:33	1.14
+++ src/modules/standard/mod_auth_digest.c	2000/05/23 13:38:02
@@ -1864,7 +1864,7 @@
 }


-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     static const char * const cfgPost[]={ "http_core.c", NULL };
     static const char * const parsePre[]={ "mod_proxy.c", NULL };
Index: src/modules/standard/mod_cern_meta.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_cern_meta.c,v
retrieving revision 1.12
diff -u -r1.12 mod_cern_meta.c
--- src/modules/standard/mod_cern_meta.c	2000/04/26 07:14:37	1.12
+++ src/modules/standard/mod_cern_meta.c	2000/05/23 13:38:03
@@ -377,7 +377,7 @@

     return rv;
 }
-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(add_cern_meta_data,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_env.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_env.c,v
retrieving revision 1.9
diff -u -r1.9 mod_env.c
--- src/modules/standard/mod_env.c	2000/04/26 07:14:37	1.9
+++ src/modules/standard/mod_env.c	2000/05/23 13:38:05
@@ -252,7 +252,7 @@
     return OK;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(fixup_env_module,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_expires.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_expires.c,v
retrieving revision 1.14
diff -u -r1.14 mod_expires.c
--- src/modules/standard/mod_expires.c	2000/04/26 07:14:37	1.14
+++ src/modules/standard/mod_expires.c	2000/05/23 13:38:06
@@ -492,7 +492,7 @@
     return OK;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(add_expires,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_file_cache.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_file_cache.c,v
retrieving revision 1.4
diff -u -r1.4 mod_file_cache.c
--- src/modules/standard/mod_file_cache.c	2000/05/19 23:24:19	1.4
+++ src/modules/standard/mod_file_cache.c	2000/05/23 13:38:08
@@ -503,7 +503,7 @@
     {NULL}
 };

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     /* static const char* const aszPre[]={"http_core.c",NULL}; */
     /* ap_hook_pre_config(pre_config,NULL,NULL,AP_HOOK_MIDDLE); */
Index: src/modules/standard/mod_headers.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_headers.c,v
retrieving revision 1.8
diff -u -r1.8 mod_headers.c
--- src/modules/standard/mod_headers.c	2000/04/26 07:14:38	1.8
+++ src/modules/standard/mod_headers.c	2000/05/23 13:38:08
@@ -242,7 +242,7 @@

     return DECLINED;
 }
-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(fixup_headers,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_log_config.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_log_config.c,v
retrieving revision 1.21
diff -u -r1.21 mod_log_config.c
--- src/modules/standard/mod_log_config.c	2000/04/26 07:14:38	1.21
+++ src/modules/standard/mod_log_config.c	2000/05/23 13:38:11
@@ -1137,7 +1137,7 @@
 }
 #endif

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_open_logs(init_config_log,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_log_transaction(multi_log_transaction,NULL,NULL,AP_HOOK_MIDDLE);
Index: src/modules/standard/mod_mime.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_mime.c,v
retrieving revision 1.16
diff -u -r1.16 mod_mime.c
--- src/modules/standard/mod_mime.c	2000/04/26 07:14:38	1.16
+++ src/modules/standard/mod_mime.c	2000/05/23 13:38:13
@@ -735,7 +735,7 @@
     return OK;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_type_checker(find_ct,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_post_config(mime_post_config,NULL,NULL,AP_HOOK_MIDDLE);
Index: src/modules/standard/mod_negotiation.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_negotiation.c,v
retrieving revision 1.27
diff -u -r1.27 mod_negotiation.c
--- src/modules/standard/mod_negotiation.c	2000/04/26 07:14:38	1.27
+++ src/modules/standard/mod_negotiation.c	2000/05/23 13:38:20
@@ -2737,7 +2737,7 @@
     {NULL}
 };

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(fix_encoding,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_type_checker(handle_multi,NULL,NULL,AP_HOOK_FIRST);
Index: src/modules/standard/mod_rewrite.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.25
diff -u -r1.25 mod_rewrite.c
--- src/modules/standard/mod_rewrite.c	2000/05/21 05:31:09	1.25
+++ src/modules/standard/mod_rewrite.c	2000/05/23 13:38:28
@@ -200,7 +200,7 @@
     { NULL }
 };

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_post_config(init_module,NULL,NULL,AP_HOOK_MIDDLE);
     ap_hook_child_init(init_child,NULL,NULL,AP_HOOK_MIDDLE);
Index: src/modules/standard/mod_setenvif.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_setenvif.c,v
retrieving revision 1.10
diff -u -r1.10 mod_setenvif.c
--- src/modules/standard/mod_setenvif.c	2000/04/26 07:14:38	1.10
+++ src/modules/standard/mod_setenvif.c	2000/05/23 13:38:29
@@ -402,7 +402,7 @@
     return DECLINED;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_post_read_request(match_headers,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/modules/standard/mod_so.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_so.c,v
retrieving revision 1.18
diff -u -r1.18 mod_so.c
--- src/modules/standard/mod_so.c	2000/05/16 02:57:00	1.18
+++ src/modules/standard/mod_so.c	2000/05/23 13:38:30
@@ -295,7 +295,7 @@
     /*
      * Add this module to the Apache core structures
      */
-    ap_add_loaded_module(modp);
+    ap_add_loaded_module(cmd->server->process, modp);

     /*
      * Register a cleanup in the config ap_pool_t (normally pconf). When
@@ -373,7 +373,7 @@
    STANDARD20_MODULE_STUFF,
    NULL,			    /* create per-dir config */
    NULL,			    /* merge per-dir config */
-   so_sconf_create,		/* server config */
+   so_sconf_create,		    /* server config */
    NULL,			    /* merge server config */
    so_cmds,			    /* command ap_table_t */
    NULL,			    /* handlers */
Index: src/modules/standard/mod_speling.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_speling.c,v
retrieving revision 1.13
diff -u -r1.13 mod_speling.c
--- src/modules/standard/mod_speling.c	2000/04/26 07:14:38	1.13
+++ src/modules/standard/mod_speling.c	2000/05/23 13:38:32
@@ -549,7 +549,7 @@
     return OK;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(check_speling,NULL,NULL,AP_HOOK_LAST);
 }
Index: src/modules/standard/mod_userdir.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_userdir.c,v
retrieving revision 1.11
diff -u -r1.11 mod_userdir.c
--- src/modules/standard/mod_userdir.c	2000/04/26 07:14:39	1.11
+++ src/modules/standard/mod_userdir.c	2000/05/23 13:38:33
@@ -338,7 +338,7 @@
     return DECLINED;
 }

-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     static const char * const aszSucc[]={ "mod_alias.c",NULL };

Index: src/modules/standard/mod_usertrack.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_usertrack.c,v
retrieving revision 1.14
diff -u -r1.14 mod_usertrack.c
--- src/modules/standard/mod_usertrack.c	2000/04/26 07:14:39	1.14
+++ src/modules/standard/mod_usertrack.c	2000/05/23 13:38:33
@@ -303,7 +303,7 @@
      "name of the tracking cookie"},
     {NULL}
 };
-static void register_hooks(void)
+static void register_hooks(process_rec *p)
 {
     ap_hook_fixups(spot_cookie,NULL,NULL,AP_HOOK_MIDDLE);
 }
Index: src/os/win32/mod_isapi.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/os/win32/mod_isapi.c,v
retrieving revision 1.10
diff -u -r1.10 mod_isapi.c
--- src/os/win32/mod_isapi.c	2000/04/28 18:27:55	1.10
+++ src/os/win32/mod_isapi.c	2000/05/23 13:38:37
@@ -581,6 +581,6 @@
    NULL,                        /* server config */
    NULL,                        /* merge server config */
    NULL,                        /* command ap_table_t */
-   isapi_handlers,      /* handlers */
+   isapi_handlers,              /* handlers */
    NULL                         /* register hooks */
 };


RE: Platform Specific MPM Design Questions

Posted by Greg Stein <gs...@lyra.org>.
On Tue, 23 May 2000, William A. Rowe, Jr. wrote:
>...
> No, you aren't - I'm looking at that solution myself.  But I'm
> in the process of looking at a custom args hook that would allow
> -prelinked- modules to rewrite the args list (and recursively
> call main() if it's required.)

Seems fine.

> I'm also looking at a way to hook in the NT service processing
> without the recursive call to main() (but with expanded argv[]).
> It will certainly involve a little bit of setjmp or stack
> manipulation, but I should be able to accomplish it.

Okay. That just sounds nasty. It seems that there *has* to be a better way
to solve the problem than to use setjmp.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/


RE: Platform Specific MPM Design Questions

Posted by "William A. Rowe, Jr." <wr...@lnd.com>.
> From: Greg Stein [mailto:gstein@lyra.org]
> Sent: Tuesday, May 23, 2000 2:37 PM
> 
> On Tue, 23 May 2000 rbb@covalent.net wrote:
> >...
> > This was my initial reaction, but as I looked at it, I 
> didn't see how
> > adding another hook could be done.  This is why I have 
> asked for a couple
> > of days to really study the patch and figure out what it is 
> doing.  My gut
> > reaction to this is a -1, but I hope to have a more 
> technical reaction
> > tomorrow sometime.
> 
> Eh? Call register_hooks, then call the process_args hook. 
> What's the big
> deal? :-) Mebbe I'm missing something...

No, you aren't - I'm looking at that solution myself.  But I'm
in the process of looking at a custom args hook that would allow
-prelinked- modules to rewrite the args list (and recursively
call main() if it's required.)

I'm also looking at a way to hook in the NT service processing
without the recursive call to main() (but with expanded argv[]).
It will certainly involve a little bit of setjmp or stack
manipulation, but I should be able to accomplish it.




RE: Platform Specific MPM Design Questions

Posted by rb...@covalent.net.
On Tue, 23 May 2000, Greg Stein wrote:

> On Tue, 23 May 2000 rbb@covalent.net wrote:
> >...
> > This was my initial reaction, but as I looked at it, I didn't see how
> > adding another hook could be done.  This is why I have asked for a couple
> > of days to really study the patch and figure out what it is doing.  My gut
> > reaction to this is a -1, but I hope to have a more technical reaction
> > tomorrow sometime.
> 
> Eh? Call register_hooks, then call the process_args hook. What's the big
> deal? :-) Mebbe I'm missing something...

As I said, I haven't had a chance to really look at this yet.  I know I
had the same reaction as you to the original post yesterday, but as I
looked at what was said in the note and at the code, things didn't seem to
fit together correctly.  With the patch sent out this morning, I hope to
see that I mis-understood the message yesterday and that the approach you
have outlined (and my initial reaction to the orignial note) are
correct.  I am planning on looking at the patch tonight sometime.

Ryan


_______________________________________________________________________________
Ryan Bloom                        	rbb@apache.org
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------


RE: Platform Specific MPM Design Questions

Posted by Greg Stein <gs...@lyra.org>.
On Tue, 23 May 2000 rbb@covalent.net wrote:
>...
> This was my initial reaction, but as I looked at it, I didn't see how
> adding another hook could be done.  This is why I have asked for a couple
> of days to really study the patch and figure out what it is doing.  My gut
> reaction to this is a -1, but I hope to have a more technical reaction
> tomorrow sometime.

Eh? Call register_hooks, then call the process_args hook. What's the big
deal? :-) Mebbe I'm missing something...

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/


RE: Platform Specific MPM Design Questions

Posted by rb...@covalent.net.
> > main_win32 is a joke in the context of MPM's.  Service control and the
> > MPM layer (should be) entirely intertwined, and the existing http_main
> > won't quite let me do this...
> > 
> > I would like to propose a change to register_hooks (better named
> > register_module?) since it occurs only once in the process (correct?)
> > I'd like to pass the process_rec *process from http_main through to
> > the register_hooks, to accomplish the following:
> 
> I do not understand why hook registration and argument processing are
> being conflated. Why not define a new hook called "process arguments" or
> something? The hook could be defined as MPM-specific, too (e.g. only MPM
> modules should see/respond to the thing)
> 
> Run the hook before the pre-config hook.
> 
> Hmm. I'd also be interested in learning how this is different from the
> pre-config hook. The presence of the process_rec?
> 
> For now: -1 (I don't like the reuse of register_hooks for this, and it
> appears that may be solved w/ a new hook)

This was my initial reaction, but as I looked at it, I didn't see how
adding another hook could be done.  This is why I have asked for a couple
of days to really study the patch and figure out what it is doing.  My gut
reaction to this is a -1, but I hope to have a more technical reaction
tomorrow sometime.

Ryan

_______________________________________________________________________________
Ryan Bloom                        	rbb@apache.org
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------


RE: Platform Specific MPM Design Questions

Posted by Greg Stein <gs...@lyra.org>.
On Mon, 22 May 2000, William A. Rowe, Jr. wrote:
>...
> main_win32 is a joke in the context of MPM's.  Service control and the
> MPM layer (should be) entirely intertwined, and the existing http_main
> won't quite let me do this...
> 
> I would like to propose a change to register_hooks (better named
> register_module?) since it occurs only once in the process (correct?)
> I'd like to pass the process_rec *process from http_main through to
> the register_hooks, to accomplish the following:

I do not understand why hook registration and argument processing are
being conflated. Why not define a new hook called "process arguments" or
something? The hook could be defined as MPM-specific, too (e.g. only MPM
modules should see/respond to the thing)

Run the hook before the pre-config hook.

Hmm. I'd also be interested in learning how this is different from the
pre-config hook. The presence of the process_rec?

For now: -1 (I don't like the reuse of register_hooks for this, and it
appears that may be solved w/ a new hook)

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/