aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_clialiases.c
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-10 22:48:58 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-10 22:48:58 +0000
commitbb812cd83bb83ded1c99cbe763933c3c94cbce30 (patch)
treee32cb5b2fe4b908b40029f13a1b712e83fe650f4 /res/res_clialiases.c
parent17da58b9064de5595fc1104b238b4bfcb0f0c16f (diff)
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: http://svn.digium.com/svn/asterisk/trunk@162923 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_clialiases.c')
-rw-r--r--res/res_clialiases.c23
1 files changed, 4 insertions, 19 deletions
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;