Did you trash the notion of making a function to do swaps in the config tree?

Bill

----- Original Message -----
From: "Greg Ames" <[EMAIL PROTECTED]>
To: "httpd" <[EMAIL PROTECTED]>
Sent: Friday, December 21, 2001 2:46 PM
Subject: [PATCH] call first post_config hook earlier


> This patch lets modules easily verify the relationship between related config 
>directives
> in the post_config hook.  The only core change is to make the first call to the
> post_config hook before the logs are open.  This allows modules to write error 
>messages
> for bad configs to the console at startup time.  Any error messages generated during
> restarts go to the error log.
>
> I included a patch to prefork which compares ServerLimit and MaxClients to 
>demonstrate
its
> use.  Notice how many lines of code it takes to deal with the physical order of the
> directives in the config file: zero.  I chose not to log the warnings to the 
>error_log
> file during the second config pass at startup to keep the logging behavior the same 
>as
the
> current code, but you certainly could log in the second pass if you want a more
permanent
> record.
>
> Greg


--------------------------------------------------------------------------------


> Index: server/main.c
> ===================================================================
> RCS file: /cvs/apache/httpd-2.0/server/main.c,v
> retrieving revision 1.111
> diff -u -d -b -r1.111 main.c
> --- main.c 2001/12/18 20:26:15 1.111
> +++ main.c 2001/12/21 18:55:07
> @@ -411,13 +411,13 @@
>   ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "Syntax OK\n");
>   destroy_and_exit_process(process, 0);
>      }
> +    if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
> +        ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0, NULL,
"Configuration Failed\n");
> +        destroy_and_exit_process(process, 1);
> +    }
>      apr_pool_clear(plog);
>      if ( ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
>          ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0, NULL,
"Unable to open logs\n");
> -        destroy_and_exit_process(process, 1);
> -    }
> -    if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
> -        ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0, NULL,
"Configuration Failed\n");
>          destroy_and_exit_process(process, 1);
>      }
>      apr_pool_destroy(ptemp);
> Index: server/mpm/prefork/prefork.c
> ===================================================================
> RCS file: /cvs/apache/httpd-2.0/server/mpm/prefork/prefork.c,v
> retrieving revision 1.226
> diff -u -d -b -r1.226 prefork.c
> --- prefork.c 2001/12/19 14:49:22 1.226
> +++ prefork.c 2001/12/21 18:55:07
> @@ -1238,6 +1238,27 @@
>      apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
>  }
>
> +static int prefork_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t 
>*ptemp,
server_rec *s)
> +{
> +    static int call_count;
> +
> +    if (ap_daemons_limit > server_limit) {
> +        if (++call_count != 2)

> +            /* if the warnings already went to the console, don't log them */
> +            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> +                         "WARNING: MaxClients of %d exceeds ServerLimit value "
> +                         "of %d servers,", ap_daemons_limit, server_limit);
> +            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> +                         " lowering MaxClients to %d.  To increase, please "
> +                         "see the ServerLimit", server_limit);
> +            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> +                         " directive.");
> +        }
> +        ap_daemons_limit = server_limit;
> +    }
> +    return OK;
> +}
> +
>  static void prefork_hooks(apr_pool_t *p)
>  {
>  #ifdef AUX3
> @@ -1245,6 +1266,7 @@
>  #endif
>
>      ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
> +    ap_hook_post_config(prefork_post_config, NULL, NULL, APR_HOOK_MIDDLE);
>  }
>
>  static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char 
>*arg)
> @@ -1298,18 +1320,8 @@
>      }
>
>      ap_daemons_limit = atoi(arg);
> -    if (ap_daemons_limit > server_limit) {
> -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> -                    "WARNING: MaxClients of %d exceeds ServerLimit value "
> -                    "of %d servers,", ap_daemons_limit, server_limit);
> -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> -                    " lowering MaxClients to %d.  To increase, please "
> -                    "see the ServerLimit", server_limit);
> -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
> -                    " directive.");
> -       ap_daemons_limit = server_limit;
> -    }
> -    else if (ap_daemons_limit < 1) {
> +
> +    if (ap_daemons_limit < 1) {
>   ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
>                       "WARNING: Require MaxClients > 0, setting to 1");
>   ap_daemons_limit = 1;
>

Reply via email to