mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-20 08:40:16 +00:00
app_confbridge: Fix memory leak on reload.
The config framework options should not be registered multiple times. Instead the configuration just needs to be reprocessed by the config framework. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@391700 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -3098,7 +3098,7 @@ static int load_module(void)
|
|||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
if (conf_load_config(0)) {
|
if (conf_load_config()) {
|
||||||
ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n");
|
ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n");
|
||||||
return AST_MODULE_LOAD_DECLINE;
|
return AST_MODULE_LOAD_DECLINE;
|
||||||
}
|
}
|
||||||
@@ -3145,7 +3145,7 @@ static int load_module(void)
|
|||||||
|
|
||||||
static int reload(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",
|
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Conference Bridge Application",
|
||||||
|
|||||||
@@ -1320,12 +1320,10 @@ static int verify_default_profiles(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int conf_load_config(int reload)
|
int conf_load_config(void)
|
||||||
{
|
{
|
||||||
if (!reload) {
|
if (aco_info_init(&cfg_info)) {
|
||||||
if (aco_info_init(&cfg_info)) {
|
return -1;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User options */
|
/* User options */
|
||||||
@@ -1373,23 +1371,29 @@ int conf_load_config(int reload)
|
|||||||
/* Menu options */
|
/* Menu options */
|
||||||
aco_option_register_custom(&cfg_info, "^[0-9A-D*#]+$", ACO_REGEX, menu_types, NULL, menu_option_handler, 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;
|
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;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
error:
|
error:
|
||||||
/* On a reload, just keep the config we already have in place. */
|
conf_destroy_config();
|
||||||
if (!reload) {
|
|
||||||
conf_destroy_config();
|
|
||||||
}
|
|
||||||
return -1;
|
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)
|
static void conf_user_profile_copy(struct user_profile *dst, struct user_profile *src)
|
||||||
{
|
{
|
||||||
*dst = *src;
|
*dst = *src;
|
||||||
|
|||||||
@@ -244,7 +244,10 @@ struct conference_bridge_user {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*! \brief load confbridge.conf file */
|
/*! \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*/
|
/*! \brief destroy the information loaded from the confbridge.conf file*/
|
||||||
void conf_destroy_config(void);
|
void conf_destroy_config(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user