]> granicus.if.org Git - apache/commitdiff
Modify post_config hook so that it can return a error,
authorIan Holsman <ianh@apache.org>
Fri, 23 Nov 2001 16:35:22 +0000 (16:35 +0000)
committerIan Holsman <ianh@apache.org>
Fri, 23 Nov 2001 16:35:22 +0000 (16:35 +0000)
causing the server not to start.
previous method was to call exit(1) which would not fail
gracefully

PR:
Obtained from:
Submitted by:
Reviewed by: (Idea only Jeff Trawick)

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

22 files changed:
CHANGES
include/http_config.h
modules/aaa/mod_auth_digest.c
modules/arch/netware/mod_nw_ssl.c
modules/arch/win32/mod_isapi.c
modules/cache/mod_file_cache.c
modules/dav/main/mod_dav.c
modules/experimental/mod_example.c
modules/filters/mod_include.c
modules/generators/mod_cgi.c
modules/generators/mod_cgid.c
modules/generators/mod_status.c
modules/http/mod_mime.c
modules/mappers/mod_rewrite.c
modules/mappers/mod_rewrite.h
modules/metadata/mod_mime_magic.c
modules/metadata/mod_unique_id.c
modules/ssl/mod_ssl.h
modules/ssl/ssl_engine_init.c
server/config.c
server/core.c
server/main.c

diff --git a/CHANGES b/CHANGES
index 01532be4eb8b4856dbf4537768ee89dce4646f87..f9397fe846534c8df5103b2e9e583ef562e9874f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,10 @@
 Changes with Apache 2.0.29-dev
 
+
+  *) Change post_config hook to return a value, allowing you
+     to flag a error post config
+     [Ian Holsman, Jeff Trawick]
+
   *) Allow SUEXEC_BIN (the path to the suexec binary that is
      hard-coded into the server) to be specified to the configure
      script by the --with-suexec-bin parameter.  [Aaron Bannert]
index 8efc81c0d6b3e06e28de1b835a9a973a7624f22e..9f24aa41266f07d018ea47d0bee1864c2bbd5bb6 100644 (file)
@@ -979,8 +979,9 @@ AP_DECLARE_HOOK(void,pre_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *
  * @param plog The logging streams pool
  * @param ptemp The temporary pool
  * @param s The list of server_recs
+ * @return OK or a 
  */
-AP_DECLARE_HOOK(void,post_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp,server_rec *s))
+AP_DECLARE_HOOK(int,post_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp,server_rec *s))
 
 /**
  * Run the open_logs functions for each module
index 5e55b89bedfa7a13ba5b1c50fd086132eba2cbc5..4601867a5e94115f6eb8c9e11b749570d377c4cb 100644 (file)
@@ -407,14 +407,14 @@ static void initialize_tables(server_rec *s, apr_pool_t *ctx)
 #endif /* APR_HAS_SHARED_MEMORY */
 
 
-static void initialize_module(apr_pool_t *p, apr_pool_t *plog,
+static int initialize_module(apr_pool_t *p, apr_pool_t *plog,
                              apr_pool_t *ptemp, server_rec *s)
 {
     /* keep from doing the init more than once at startup, and delay
      * the init until the second round
      */
     if (++call_cnt < 2)
-       return;
+       return OK;
 
     /* only initialize the secret on startup, not on restarts */
     if (call_cnt == 2)
@@ -434,6 +434,7 @@ static void initialize_module(apr_pool_t *p, apr_pool_t *plog,
     initialize_tables(s, p);
     apr_pool_cleanup_register(p, NULL, cleanup_tables, apr_pool_cleanup_null);
 #endif /* APR_HAS_SHARED_MEMORY */
+    return OK;
 }
 
 static void initialize_child(apr_pool_t *p, server_rec *s)
index a40c1c7eb9273aa2e15b3b83a667df0f20ea6187..f507fab74a80f69502671be8caebc1aaed066b11 100644 (file)
@@ -340,7 +340,7 @@ static void nwssl_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
     ap_seclisteners = NULL;
 }
 
-static void nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
+static int nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
                           apr_pool_t *ptemp, server_rec *s)
 {
     seclisten_rec* sl;
@@ -373,16 +373,17 @@ static void nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
                                               pconf)) != APR_SUCCESS) {
                     ap_log_perror(APLOG_MARK, APLOG_CRIT, status, pconf,
                                  "alloc_listener: failed to set up sockaddr for %s:%d", sl->addr, sl->port);
-                    exit(1);
+                    return HTTP_INTERNAL_SERVER_ERROR;
                 }
                 lr->next = ap_listeners;
                 ap_listeners = lr;
                 apr_pool_cleanup_register(pconf, lr, nwssl_socket_cleanup, apr_pool_cleanup_null);
             }                        
         } else {
-            exit(1);
+            return HTTP_INTERNAL_SERVER_ERROR;
         }
     } 
+    return OK;
 }
 
 static void *nwssl_config_server_create(apr_pool_t *p, server_rec *s)
index 0825c05faf13d190810f33758b2135b0c0f3bb1f..f4f7185e856a445dd3d6509228fd5a94b78bf114 100644 (file)
@@ -213,7 +213,7 @@ static int compare_loaded(const void *av, const void *bv)
     return strcmp((*a)->filename, (*b)->filename);
 }
 
-static void isapi_post_config(apr_pool_t *p, apr_pool_t *plog,
+static int isapi_post_config(apr_pool_t *p, apr_pool_t *plog,
                               apr_pool_t *ptemp, server_rec *s)
 {
     isapi_server_conf *sconf = ap_get_module_config(s->module_config, 
@@ -228,6 +228,7 @@ static void isapi_post_config(apr_pool_t *p, apr_pool_t *plog,
     for (s = s->next; s; s = s->next) {
        ap_set_module_config(s->module_config, &isapi_module, sconf);
     }
+    return OK;
 }
 
 static apr_status_t isapi_load(apr_pool_t *p, isapi_server_conf *sconf, 
index 98002cb9aae773faf8c6e2b247d9a89e503fa9d7..dbc4eb83cfb1af7cdc20d096c61b5f5ee94bdd0e 100644 (file)
@@ -299,10 +299,11 @@ static const char *cachefilemmap(cmd_parms *cmd, void *dummy, const char *filena
     return NULL;
 }
 
-static void file_cache_post_config(apr_pool_t *p, apr_pool_t *plog,
+static int file_cache_post_config(apr_pool_t *p, apr_pool_t *plog,
                                    apr_pool_t *ptemp, server_rec *s)
 {
     /* Hummm, anything to do here? */
+    return OK;
 }
 
 /* If it's one of ours, fill in r->finfo now to avoid extra stat()... this is a
index 8272daf3e92520b53bb47acc85f22cce5af1a069..90879c4012bcb66910ae5172099913b350cf974f 100644 (file)
@@ -132,12 +132,13 @@ typedef struct {
 /* forward-declare for use in configuration lookup */
 extern module DAV_DECLARE_DATA dav_module;
 
-static void dav_init_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
+static int dav_init_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
                              server_rec *s)
 {
     /* DBG0("dav_init_handler"); */
 
     ap_add_version_component(p, "DAV/2");
+    return OK;
 }
 
 static void *dav_create_server_config(apr_pool_t *p, server_rec *s)
index 755e637eeb3eedaa688ca186034e7e825f31014d..663652891b2b40c0d091c3360581e45245f708e2 100644 (file)
@@ -864,13 +864,14 @@ static void x_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
  * server will still call any remaining modules with an handler for this
  * phase.
  */
-static void x_post_config(apr_pool_t *pconf, apr_pool_t *plog,
+static int x_post_config(apr_pool_t *pconf, apr_pool_t *plog,
                           apr_pool_t *ptemp, server_rec *s)
 {
     /*
      * Log the call and exit.
      */
     trace_add(NULL, NULL, NULL, "x_post_config()");
+    return OK;
 }
 
 /*
index 3da84a98d5e8eace727b13a7005637d96d0e6646..0037f7686c39b86ac83eac6c2ad7782e96ed26dd 100644 (file)
@@ -3121,7 +3121,7 @@ static void ap_register_include_handler(char *tag, include_handler_fn_t *func)
     apr_hash_set(include_hash, tag, strlen(tag) + 1, (const void *)func);
 }
 
-static void include_post_config(apr_pool_t *p, apr_pool_t *plog,
+static int include_post_config(apr_pool_t *p, apr_pool_t *plog,
                                 apr_pool_t *ptemp, server_rec *s)
 {
     include_hash = apr_hash_make(p);
@@ -3145,6 +3145,7 @@ static void include_post_config(apr_pool_t *p, apr_pool_t *plog,
         ssi_pfn_register("flastmod", handle_flastmod);
         ssi_pfn_register("printenv", handle_printenv);
     }
+    return OK;
 }
 
 static const char *set_default_error_msg(cmd_parms *cmd, void *mconfig, const char *msg)
index df8950b4503b4f36540ff467e5425f33439be898..6424dd50de6eda70a2aeb54d710d260aca027b85 100644 (file)
@@ -929,7 +929,7 @@ static int handle_exec(include_ctx_t *ctx, apr_bucket_brigade **bb, request_rec
  *============================================================================*/
 
 
-static void cgi_post_config(apr_pool_t *p, apr_pool_t *plog,
+static int cgi_post_config(apr_pool_t *p, apr_pool_t *plog,
                                 apr_pool_t *ptemp, server_rec *s)
 {
     cgi_pfn_reg_with_ssi = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
@@ -950,6 +950,7 @@ static void cgi_post_config(apr_pool_t *p, apr_pool_t *plog,
     if (!cgi_build_command) {
         cgi_build_command = default_build_command;
     }
+    return OK;
 }
 
 static void register_hooks(apr_pool_t *p)
index 00c7fbb609ea1e48db64b9d1d6dac6b568597ab3..efa4e12afee7a164f55742cfcc8a5c0c694d2822 100644 (file)
@@ -587,7 +587,7 @@ static int cgid_server(void *data)
     return -1; 
 } 
 
-static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, 
+static int cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, 
                       server_rec *main_server) 
 { 
     pid_t pid; 
@@ -613,6 +613,7 @@ static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
         if ((pid = fork()) < 0) {
             ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
                          "Couldn't spawn cgid daemon process"); 
+            /* XXX should we return a failure here ? */
         }
         else if (pid == 0) {
             apr_pool_create(&pcgi, p); 
@@ -638,6 +639,7 @@ static void cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
             cgid_pfn_reg_with_ssi("exec", handle_exec);
         }
     }
+    return OK;
 } 
 
 static void *create_cgid_config(apr_pool_t *p, server_rec *s) 
index 46e672d4d839af3754f2973b6f5ea578fdd08050..a2ee0a9573abfd922f9422bdb8118c709dbc99cd 100644 (file)
@@ -767,7 +767,7 @@ static int status_handler(request_rec *r)
 }
 
 
-static void status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
+static int status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 {
     status_flags[SERVER_DEAD] = '.';   /* We don't want to assume these are in */
     status_flags[SERVER_READY] = '_';  /* any particular order in scoreboard.h */
@@ -780,6 +780,7 @@ static void status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, serv
     status_flags[SERVER_CLOSING] = 'C';
     status_flags[SERVER_GRACEFUL] = 'G';
     status_flags[SERVER_IDLE_KILL] = 'I';
+    return OK;
 }
 
 static void register_hooks(apr_pool_t *p)
index 1721e3ec0cbfce4c811737d6a6a6c5ac2999cca0..041f5ed09f509159f0aff029e9e18dba51622a38 100644 (file)
@@ -428,7 +428,7 @@ AP_INIT_TAKE1("TypesConfig", set_types_config, NULL, RSRC_CONF,
 
 static apr_hash_t *mime_type_extensions;
 
-static void mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
+static int mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 {
     ap_configfile_t *f;
     char l[MAX_STRING_LEN];
@@ -443,7 +443,7 @@ static void mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
     if ((status = ap_pcfg_openfile(&f, ptemp, types_confname)) != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
                     "could not open mime types config file %s.", types_confname);
-        exit(1);
+        return HTTP_INTERNAL_SERVER_ERROR;
     }
 
     mime_type_extensions = apr_hash_make(p);
@@ -462,6 +462,7 @@ static void mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
         }
     }
     ap_cfg_closefile(f);
+    return OK;
 }
 
 static char *zap_sp(char *s)
index ceb4463fa34eb624c23e84775ea65c80b24d5bf8..311af2759dcca38a74f03ef105ed25da59623123 100644 (file)
@@ -920,7 +920,7 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, rewriterule_entry *cfg
 **
 */
 
-static void init_module(apr_pool_t *p,
+static int init_module(apr_pool_t *p,
                         apr_pool_t *plog,
                         apr_pool_t *ptemp,
                         server_rec *s)
@@ -945,7 +945,7 @@ static void init_module(apr_pool_t *p,
                                NULL, p)) != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
                      "mod_rewrite: could not create rewrite_log_lock");
-        exit(1);
+        return HTTP_INTERNAL_SERVER_ERROR;
     }
 
     rewritelock_create(s, p);
@@ -960,6 +960,7 @@ static void init_module(apr_pool_t *p,
         if (!first_time)
            run_rewritemap_programs(s, p);
     }
+    return OK;
 }
 
 
index 2470989d4f391a8d0902804cee7ea678b290892e..b885e181f03a39b0d7004cea32c2a5b1a2d90b22 100644 (file)
@@ -385,7 +385,7 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, rewriterule_entry *cfg
                                            char *key, char *val);
 
     /* initialisation */
-static void init_module(apr_pool_t *p,
+static int init_module(apr_pool_t *p,
                         apr_pool_t *plog,
                         apr_pool_t *ptemp,
                         server_rec *s);
index 6f1f039ab7a1d7f62199ffef678a6ed516a49b44..b4162bcf9c57a36600226af8340e3d971d514243 100644 (file)
@@ -2395,7 +2395,7 @@ static int revision_suffix(request_rec *r)
 /*
  * initialize the module
  */
-static void magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
+static int magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
 {
     int result;
     magic_server_config_rec *conf;
@@ -2415,7 +2415,7 @@ static void magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, serve
        else if (conf->magicfile) {
            result = apprentice(s, p);
            if (result == -1)
-               return;
+               return OK;
 #if MIME_MAGIC_DEBUG
            prevm = 0;
            ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
@@ -2440,6 +2440,7 @@ static void magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, serve
 #endif
        }
     }
+    return OK;
 }
 
 /*
index 851334d0b26426b23ac1cf4fedb45f2938f41b81..a0daca8cb5d1ae39040afd5d9e10c5093e64b66a 100644 (file)
@@ -172,7 +172,7 @@ static unsigned short unique_id_rec_offset[UNIQUE_ID_REC_MAX],
                       unique_id_rec_total_size,
                       unique_id_rec_size_uu;
 
-static void unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
+static int unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
 {
     char str[APRMAXHOSTLEN + 1];
     apr_short_interval_time_t pause;
@@ -210,7 +210,7 @@ static void unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *p
     if ((rv = apr_gethostname(str, sizeof(str) - 1, p)) != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
           "mod_unique_id: unable to find hostname of the server");
-        exit(1);
+        return HTTP_INTERNAL_SERVER_ERROR;
     }
 
     /* XXX theoretically there are boxes out there which want to use
@@ -219,7 +219,7 @@ static void unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *p
     if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET, 0, 0, p)) != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
                     "mod_unique_id: unable to find IPv4 address of \"%s\"", str);
-        exit(1);
+        return HTTP_INTERNAL_SERVER_ERROR;
     }
 
     global_in_addr = sockaddr->sa.sin.sin_addr.s_addr;
@@ -244,6 +244,7 @@ static void unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *p
      */
     pause = (apr_short_interval_time_t)(1000000 - (apr_time_now() % APR_USEC_PER_SEC));
     apr_sleep(pause);
+    return OK;
 }
 
 static void unique_id_child_init(apr_pool_t *p, server_rec *s)
index 9634499049b9d10d8ce658f8479210dc7d6d0753..8bd0c71b8a5bbbea6891169f35607452138bb5d4 100644 (file)
@@ -605,7 +605,7 @@ const char  *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *, char *, char *)
 #endif
 
 /*  module initialization  */
-void         ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *);
+int          ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *);
 void         ssl_init_SSLLibrary(void);
 void         ssl_init_Engine(server_rec *, apr_pool_t *);
 void         ssl_init_TmpKeysHandle(int, server_rec *, apr_pool_t *);
index 02c68b9d6035a21c39e65f553a82db3296f7c8b1..cbb86d1f7aefb817da302dcde7cc2c9d4c2be49b 100644 (file)
@@ -70,7 +70,7 @@
 /*
  *  Per-module initialization
  */
-void ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
+int ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
     apr_pool_t *ptemp, server_rec *s)
 {
     SSLModConfigRec *mc = myModConfig(s);
@@ -191,7 +191,7 @@ void ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
     if (mc->nInitCount == 1) {
         ssl_pphrase_Handle(s, p);
         ssl_init_TmpKeysHandle(SSL_TKP_GEN, s, p);
-        return;
+        return OK;
     }
 
     /*
@@ -265,7 +265,7 @@ void ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
     ap_add_version_component(p, ssl_var_lookup(p, s, NULL, NULL, "SSL_VERSION_LIBRARY"));
 
     SSL_init_app_data2_idx(); /* for SSL_get_app_data2() at request time */
-    return;
+    return OK;
 }
 
 /*
index b44957f8026fdab08e1e758c5dd942f64bfb37f6..587e4522610fcbcee7633eabbac1d86622bb81ed 100644 (file)
@@ -121,9 +121,9 @@ AP_IMPLEMENT_HOOK_RUN_ALL(int,header_parser,
 AP_IMPLEMENT_HOOK_VOID(pre_config,
                       (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp),
                        (pconf,plog,ptemp))
-AP_IMPLEMENT_HOOK_VOID(post_config,
+AP_IMPLEMENT_HOOK_RUN_ALL(int,post_config,
                       (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp,
-                        server_rec *s),(pconf,plog,ptemp,s))
+                        server_rec *s),(pconf,plog,ptemp,s),OK,DECLINED)
 /* During the course of debugging I expanded this macro out, so
  * rather than remove all the useful information there is in the
  * following lines, I'm going to leave it here in case anyone
@@ -131,7 +131,7 @@ AP_IMPLEMENT_HOOK_VOID(post_config,
  *
  * Ben has looked at it and thinks it correct :)
  *
-AP_DECLARE(void) ap_hook_post_config(ap_HOOK_post_config_t *pf,
+AP_DECLARE(int) ap_hook_post_config(ap_HOOK_post_config_t *pf,
                                      const char * const *aszPre,
                                      const char * const *aszSucc,
                                      int nOrder)
@@ -159,7 +159,7 @@ AP_DECLARE(apr_array_header_t *) ap_hook_get_post_config(void) {
     return _hooks.link_post_config;
 }
 
-AP_DECLARE(void) ap_run_post_config (apr_pool_t *pconf,
+AP_DECLARE(int) ap_run_post_config (apr_pool_t *pconf,
                                      apr_pool_t *plog,
                                      apr_pool_t *ptemp,
                                      server_rec *s)
index 1296fea71da3fe8198022fc6db536d5ab428462e..e690fcbd273d4d694897eeab3f54a3a7eef3b428 100644 (file)
@@ -3258,9 +3258,10 @@ static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
     return APR_SUCCESS;
 }
 
-static void core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
+static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 {
     ap_set_version(pconf);
+    return OK;
 }
 
 static void core_open_logs(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
index 9aa11f640c6f24e633f75cb26d90c3c2b8b3359b..9e279419ecca92d1908c17fd82014bdc2181ec55 100644 (file)
@@ -397,7 +397,10 @@ int main(int argc, const char * const argv[])
     }
     apr_pool_clear(plog);
     ap_run_open_logs(pconf, plog, ptemp, server_conf);
-    ap_run_post_config(pconf, plog, ptemp, server_conf);
+    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);
 
     for (;;) {
@@ -423,7 +426,10 @@ int main(int argc, const char * const argv[])
         apr_sort_hooks();
        apr_pool_clear(plog);
        ap_run_open_logs(pconf, plog, ptemp, server_conf);
-       ap_run_post_config(pconf, plog, ptemp, server_conf);
+       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);
        apr_pool_lock(pconf, 1);