core: fix cfg_update() on config error
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 7 Oct 2009 22:14:32 +0000 (00:14 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 7 Oct 2009 22:18:12 +0000 (00:18 +0200)
Don't try to use the cfg framework if it was not initialized (it
could happen if for example config parsing fails and shutdown is
triggered before the cfg framework is initialized).

main.c

diff --git a/main.c b/main.c
index c1f9d07..01a6fde 100644 (file)
--- a/main.c
+++ b/main.c
@@ -473,6 +473,9 @@ unsigned long shm_mem_size=SHM_MEM_SIZE * 1024 * 1024;
 int my_argc;
 char **my_argv;
 
+/* set to 1 when the cfg framework and core cfg is initialized/registered */
+static int cfg_ok=0;
+
 #define MAX_FD 32 /* maximum number of inherited open file descriptors,
                    (normally it shouldn't  be bigger  than 3) */
 
@@ -511,10 +514,12 @@ void cleanup(show_status)
        /* restore the original core configuration before the
         * config block is freed, otherwise even logging is unusable,
         * it can case segfault */
-       cfg_update();
-       /* copy current config into default_core_cfg */
-       if (core_cfg)
-               default_core_cfg=*((struct cfg_group_core*)core_cfg);
+       if (cfg_ok){
+               cfg_update();
+               /* copy current config into default_core_cfg */
+               if (core_cfg)
+                       default_core_cfg=*((struct cfg_group_core*)core_cfg);
+       }
        core_cfg = &default_core_cfg;
        cfg_destroy();
 #ifdef USE_TCP
@@ -2080,6 +2085,7 @@ try_again:
                LOG(L_CRIT, "could not declare the core configuration\n");
                goto error;
        }
+       cfg_ok=1;
 #ifdef USE_TCP
        if (tcp_register_cfg()){
                LOG(L_CRIT, "could not register the tcp configuration\n");