]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
If using the old deprecated format, a reload would cause the class to disappear.
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 1 Jun 2009 20:07:04 +0000 (20:07 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 1 Jun 2009 20:07:04 +0000 (20:07 +0000)
(closes issue #14759)
 Reported by: lidocaineus
 Patches:
       20090518__issue14759.diff.txt uploaded by tilghman (license 14)
 Tested by: lmadsen

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@198665 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_musiconhold.c

index 33f258dc0a6248c2ed05598b7b131b366afa56ad..4ec9e648f3da00cd59a471b0b48eb01a98b5f61d 100644 (file)
@@ -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;