app_confbridge: Fix memory leak on reload.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 13 Jun 2013 19:04:41 +0000 (19:04 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 13 Jun 2013 19:04:41 +0000 (19:04 +0000)
The config framework options should not be registered multiple times.
Instead the configuration just needs to be reprocessed by the config
framework.
........

Merged revisions 391700 from http://svn.asterisk.org/svn/asterisk/branches/11

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@391701 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_confbridge.c
apps/confbridge/conf_config_parser.c
apps/confbridge/include/confbridge.h

index 96ef124..8919b7e 100644 (file)
@@ -3142,7 +3142,7 @@ static int load_module(void)
 {
        int res = 0;
 
-       if (conf_load_config(0)) {
+       if (conf_load_config()) {
                ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n");
                return AST_MODULE_LOAD_DECLINE;
        }
@@ -3191,7 +3191,7 @@ static int load_module(void)
 
 static int reload(void)
 {
-       return conf_load_config(1);
+       return conf_reload_config();
 }
 
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Conference Bridge Application",
index 6cec255..042968c 100644 (file)
@@ -1889,12 +1889,10 @@ static int verify_default_profiles(void)
        return 0;
 }
 
-int conf_load_config(int reload)
+int conf_load_config(void)
 {
-       if (!reload) {
-               if (aco_info_init(&cfg_info)) {
-                       return -1;
-               }
+       if (aco_info_init(&cfg_info)) {
+               return -1;
        }
 
        /* User options */
@@ -1944,23 +1942,29 @@ int conf_load_config(int reload)
        aco_option_register(&cfg_info, "type", ACO_EXACT, menu_types, NULL, OPT_NOOP_T, 0, 0);
        aco_option_register_custom(&cfg_info, "^[0-9A-D*#]+$", ACO_REGEX, menu_types, NULL, menu_option_handler, 0);
 
-       if (aco_process_config(&cfg_info, reload) == ACO_PROCESS_ERROR) {
+       if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) {
                goto error;
        }
 
-       if (!reload && ast_cli_register_multiple(cli_confbridge_parser, ARRAY_LEN(cli_confbridge_parser))) {
+       if (ast_cli_register_multiple(cli_confbridge_parser, ARRAY_LEN(cli_confbridge_parser))) {
                goto error;
        }
 
        return 0;
 error:
-       /* On a reload, just keep the config we already have in place. */
-       if (!reload) {
-               conf_destroy_config();
-       }
+       conf_destroy_config();
        return -1;
 }
 
+int conf_reload_config(void)
+{
+       if (aco_process_config(&cfg_info, 1) == ACO_PROCESS_ERROR) {
+               /* On a reload, just keep the config we already have in place. */
+               return -1;
+       }
+       return 0;
+}
+
 static void conf_user_profile_copy(struct user_profile *dst, struct user_profile *src)
 {
        *dst = *src;
index 1af621d..60b2eab 100644 (file)
@@ -247,7 +247,10 @@ struct confbridge_user {
 };
 
 /*! \brief load confbridge.conf file */
-int conf_load_config(int reload);
+int conf_load_config(void);
+
+/*! \brief reload confbridge.conf file */
+int conf_reload_config(void);
 
 /*! \brief destroy the information loaded from the confbridge.conf file*/
 void conf_destroy_config(void);