aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-06-01 20:07:04 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-06-01 20:07:04 +0000
commita72bf02d896b823eb9560b7f4e87a65a1b571a4a (patch)
tree6eb6e84cfc737e60867437b37631febafe76e957
parent63100fa285e9bab86130b4493b18643ee0603b87 (diff)
If using the old deprecated format, a reload would cause the class to disappear.
(closes issue #14759) Reported by: lidocaineus Patches: 20090518__issue14759.diff.txt uploaded by tilghman (license 14) Tested by: lmadsen git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@198665 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--res/res_musiconhold.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 33f258dc0..4ec9e648f 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -157,6 +157,7 @@ struct mohclass {
/*! FD for timing source */
int pseudofd;
unsigned int delete:1;
+ unsigned int deprecated:1;
AST_LIST_HEAD_NOLOCK(, mohdata) members;
AST_LIST_ENTRY(mohclass) list;
};
@@ -1243,7 +1244,8 @@ static int load_moh_classes(int reload)
*args++ = '\0';
}
- if ((tmp_class = get_mohbyname(var->name, 0))) {
+ /* Only skip if this is a duplicate of an above item */
+ if ((tmp_class = get_mohbyname(var->name, 0)) && !tmp_class->deprecated && !tmp_class->delete) {
tmp_class = mohclass_unref(tmp_class);
continue;
}
@@ -1251,14 +1253,15 @@ static int load_moh_classes(int reload)
if (!(class = moh_class_malloc())) {
break;
}
-
+
+ class->deprecated = 1;
ast_copy_string(class->name, var->name, sizeof(class->name));
ast_copy_string(class->dir, data, sizeof(class->dir));
ast_copy_string(class->mode, var->value, sizeof(class->mode));
if (args) {
ast_copy_string(class->args, args, sizeof(class->args));
}
-
+
moh_register(class, reload);
class = NULL;
@@ -1273,7 +1276,8 @@ static int load_moh_classes(int reload)
dep_warning = 1;
}
- if ((tmp_class = get_mohbyname(var->name, 0))) {
+ /* Only skip if this is a duplicate of an above item */
+ if ((tmp_class = get_mohbyname(var->name, 0)) && !tmp_class->deprecated && !tmp_class->delete) {
tmp_class = mohclass_unref(tmp_class);
continue;
}
@@ -1285,14 +1289,15 @@ static int load_moh_classes(int reload)
if (!(class = moh_class_malloc())) {
break;
}
-
+
+ class->deprecated = 1;
ast_copy_string(class->name, var->name, sizeof(class->name));
ast_copy_string(class->dir, var->value, sizeof(class->dir));
ast_copy_string(class->mode, "files", sizeof(class->mode));
if (args) {
ast_copy_string(class->args, args, sizeof(class->args));
}
-
+
moh_register(class, reload);
class = NULL;