aboutsummaryrefslogtreecommitdiffstats
path: root/res
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-08-23 14:40:03 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-08-23 14:40:03 +0000
commitd6200276943e8c4f85746f29246a1d41370d0d2b (patch)
treeed807a1b20ccd72e12500ebddc965c5071362fad /res
parentbb2c0af6d0b0f51b6f578356d8e741f273d3f841 (diff)
ensure that features are not duplicated during reload (issue #3764, take two)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6377 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rwxr-xr-xres/res_features.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/res/res_features.c b/res/res_features.c
index 04d023698..8fac01e80 100755
--- a/res/res_features.c
+++ b/res/res_features.c
@@ -882,6 +882,15 @@ void ast_unregister_feature(struct ast_call_feature *feature)
free(feature);
}
+static void ast_unregister_features(void)
+{
+ struct ast_call_feature *feature;
+
+ AST_LIST_LOCK(&feature_list);
+ while ((feature = AST_LIST_REMOVE_HEAD(&feature_list,feature_entry)))
+ free(feature);
+ AST_LIST_UNLOCK(&feature_list);
+}
/* find a feature by name */
static struct ast_call_feature *find_feature(char *name)
@@ -1766,11 +1775,16 @@ static int handle_showfeatures(int fd, int argc, char *argv[])
ast_cli(fd, "\n");
ast_cli(fd, format, "Dynamic Feature", "Default", "Current");
ast_cli(fd, format, "---------------", "-------", "-------");
- AST_LIST_LOCK(&feature_list);
- AST_LIST_TRAVERSE(&feature_list, feature, feature_entry) {
- ast_cli(fd, format, feature->sname, "no def", feature->exten);
+ if (AST_LIST_EMPTY(&feature_list)) {
+ ast_cli(fd, "(none)\n");
+ }
+ else {
+ AST_LIST_LOCK(&feature_list);
+ AST_LIST_TRAVERSE(&feature_list, feature, feature_entry) {
+ ast_cli(fd, format, feature->sname, "no def", feature->exten);
+ }
+ AST_LIST_UNLOCK(&feature_list);
}
- AST_LIST_UNLOCK(&feature_list);
return RESULT_SUCCESS;
}
@@ -1968,6 +1982,7 @@ static int load_config(void)
}
/* Map a key combination to an application*/
+ ast_unregister_features();
var = ast_variable_browse(cfg, "applicationmap");
while(var) {
char *tmp_val=strdup(var->value);
@@ -1986,7 +2001,7 @@ static int load_config(void)
if (app) app_args=strsep(&tmp_val,",");
if (!(app && strlen(app)) || !(exten && strlen(exten)) || !(party && strlen(party)) || !(var->name && strlen(var->name))) {
- ast_log(LOG_NOTICE, "Please check the feature Mapping Syntax, either extension, name or app aren't provided %s %s %s %s\n",app,exten,party,var->name);
+ ast_log(LOG_NOTICE, "Please check the feature Mapping Syntax, either extension, name, or app aren't provided %s %s %s %s\n",app,exten,party,var->name);
free(tmp_val);
var = var->next;
continue;