Update of /usr/cvsroot/asterisk/res
In directory mongoose.digium.com:/tmp/cvs-serv6525/res

Modified Files:
        res_musiconhold.c 
Log Message:
issue #5766


Index: res_musiconhold.c
===================================================================
RCS file: /usr/cvsroot/asterisk/res/res_musiconhold.c,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -d -r1.74 -r1.75
--- res_musiconhold.c   8 Nov 2005 01:55:31 -0000       1.74
+++ res_musiconhold.c   16 Nov 2005 17:48:18 -0000      1.75
@@ -785,14 +785,18 @@
        return class->total_files;
 }
 
-static int moh_register(struct mohclass *moh)
+static int moh_register(struct mohclass *moh, int reload)
 {
 #ifdef ZAPATA_MOH
        int x;
 #endif
        ast_mutex_lock(&moh_lock);
        if (get_mohbyname(moh->name)) {
-               ast_log(LOG_WARNING, "Music on Hold class '%s' already 
exists\n", moh->name);
+               if (reload) {
+                       ast_log(LOG_DEBUG, "Music on Hold class '%s' left alone 
from initial load.\n", moh->name);
+               } else {
+                       ast_log(LOG_WARNING, "Music on Hold class '%s' already 
exists\n", moh->name);
+               }
                free(moh);      
                ast_mutex_unlock(&moh_lock);
                return -1;
@@ -914,7 +918,7 @@
        return class;
 }
 
-static int load_moh_classes(void)
+static int load_moh_classes(int reload)
 {
        struct ast_config *cfg;
        struct ast_variable *var;
@@ -979,7 +983,9 @@
                                continue;
                        }
 
-                       moh_register(class);
+                       /* Don't leak a class when it's already registered */
+                       moh_register(class, reload);
+
                        numclasses++;
                }
        }
@@ -1011,7 +1017,7 @@
                                if (args)
                                        ast_copy_string(class->args, args, 
sizeof(class->args));
                                
-                               moh_register(class);
+                               moh_register(class, reload);
                                numclasses++;
                        }
                }
@@ -1039,7 +1045,7 @@
                        if (args)       
                                ast_copy_string(class->args, args, 
sizeof(class->args));
                        
-                       moh_register(class);
+                       moh_register(class, reload);
                        numclasses++;
                }
                var = var->next;
@@ -1103,7 +1109,7 @@
 
        moh_on_off(0);
        ast_moh_destroy();
-       x = load_moh_classes();
+       x = load_moh_classes(1);
        moh_on_off(1);
        ast_cli(fd, "\n%d class%s reloaded.\n", x, x == 1 ? "" : "es");
        return 0;
@@ -1152,11 +1158,11 @@
 
 static struct ast_cli_entry  cli_moh_files_show = { { "moh", "files", "show"}, 
cli_files_show, "List MOH file-based classes", "Lists all loaded file-based MOH 
classes and their files", NULL};
 
-static int init_classes(void) 
+static int init_classes(int reload) 
 {
        struct mohclass *moh;
     
-       if (!load_moh_classes())                /* Load classes from config */
+       if (!load_moh_classes(reload))          /* Load classes from config */
                return 0;                       /* Return if nothing is found */
        moh = mohclasses;
        while (moh) {
@@ -1185,7 +1191,7 @@
        if (!res)
                res = ast_register_application(app4, moh4_exec, synopsis4, 
descrip4);
 
-       if (!init_classes()) {  /* No music classes configured, so skip it */
+       if (!init_classes(0)) {         /* No music classes configured, so skip 
it */
                ast_log(LOG_WARNING, "No music on hold classes configured, 
disabling music on hold.");
        } else {
                ast_install_music_functions(local_ast_moh_start, 
local_ast_moh_stop, local_ast_moh_cleanup);
@@ -1196,7 +1202,7 @@
 
 int reload(void)
 {
-       if (init_classes())
+       if (init_classes(1))
                ast_install_music_functions(local_ast_moh_start, 
local_ast_moh_stop, local_ast_moh_cleanup);
 
        return 0;

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to