From fb21acf31075a99dca8837b71fb92ea921e8d24a Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Wed, 10 Dec 2008 22:48:58 +0000 Subject: Fix reloads of aliased CLI commands. Due to changes done to turn it into a single memory allocation we can't just use the existing CLI alias structure. We have to destroy all existing ones and then create new ones. (closes issue #14054) Reported by: pj git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@162923 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_clialiases.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) (limited to 'res') diff --git a/res/res_clialiases.c b/res/res_clialiases.c index bb0a08387..1ea302401 100644 --- a/res/res_clialiases.c +++ b/res/res_clialiases.c @@ -46,7 +46,6 @@ struct cli_alias { struct ast_cli_entry cli_entry; /*!< Actual CLI structure used for this alias */ char *alias; /*!< CLI Alias */ char *real_cmd; /*!< Actual CLI command it is aliased to */ - unsigned int marked:1; /*!< Bit to indicate whether this CLI alias is marked for destruction or not */ }; static struct ao2_container *cli_aliases; @@ -167,19 +166,10 @@ static struct ast_cli_entry cli_alias[] = { AST_CLI_DEFINE(alias_show, "Show CLI command aliases"), }; -/*! \brief Function called to mark an alias for destruction */ -static int alias_mark(void *obj, void *arg, int flags) -{ - struct cli_alias *alias = obj; - alias->marked = 1; - return 0; -} - -/*! \brief Function called to see if an alias is marked for destruction */ +/*! \brief Function called to to see if an alias is marked for destruction, they always are! */ static int alias_marked(void *obj, void *arg, int flags) { - struct cli_alias *alias = obj; - return alias->marked ? CMP_MATCH : 0; + return CMP_MATCH; } /*! \brief Function called to load or reload the configuration file */ @@ -197,9 +187,9 @@ static void load_config(int reload) return; } - /* Mark CLI aliases for pruning */ + /* Destroy any existing CLI aliases */ if (reload) { - ao2_callback(cli_aliases, OBJ_NODATA, alias_mark, NULL); + ao2_callback(cli_aliases, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE , alias_marked, NULL); } for (v = ast_variable_browse(cfg, "general"); v; v = v->next) { @@ -227,11 +217,6 @@ static void load_config(int reload) } } - /* Drop any CLI aliases that should no longer exist */ - if (reload) { - ao2_callback(cli_aliases, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE , alias_marked, NULL); - } - ast_config_destroy(cfg); return; -- cgit v1.2.3