[asterisk-commits] qwell: trunk r114595 - in /trunk: ./ res/res_musiconhold.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Apr 23 13:33:29 CDT 2008


Author: qwell
Date: Wed Apr 23 13:33:28 2008
New Revision: 114595

URL: http://svn.digium.com/view/asterisk?view=rev&rev=114595
Log:
Merged revisions 114594 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r114594 | qwell | 2008-04-23 13:28:44 -0500 (Wed, 23 Apr 2008) | 8 lines

Fix reload/unload for res_musiconhold module.

(closes issue #11575)
Reported by: sunder
Patches:
      M11575_14_rev3.diff uploaded by junky (license 177)
      bug11575_trunk.diff.txt uploaded by jamesgolovich (license 176)

........

Modified:
    trunk/   (props changed)
    trunk/res/res_musiconhold.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/res/res_musiconhold.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_musiconhold.c?view=diff&rev=114595&r1=114594&r2=114595
==============================================================================
--- trunk/res/res_musiconhold.c (original)
+++ trunk/res/res_musiconhold.c Wed Apr 23 13:33:28 2008
@@ -988,18 +988,16 @@
 	int x;
 #endif
 	struct mohclass *mohclass = NULL;
+	int res = 0;
 
 	AST_RWLIST_WRLOCK(&mohclasses);
 	if ((mohclass = get_mohbyname(moh->name, 0)) && !moh_diff(mohclass, moh)) {
-		mohclass->delete = 0;
-		if (reload) {
-			ast_debug(1, "Music on Hold class '%s' left alone from initial load.\n", moh->name);
-		} else {
+		if (!mohclass->delete) {
 			ast_log(LOG_WARNING, "Music on Hold class '%s' already exists\n", moh->name);
-		}
-		ast_free(moh);	
-		AST_RWLIST_UNLOCK(&mohclasses);
-		return -1;
+			ast_free(moh);
+			AST_RWLIST_UNLOCK(&mohclasses);
+			return -1;
+		}
 	}
 	AST_RWLIST_UNLOCK(&mohclasses);
 
@@ -1007,7 +1005,12 @@
 	moh->start -= respawn_time;
 	
 	if (!strcasecmp(moh->mode, "files")) {
-		if (!moh_scan_files(moh)) {
+		res = moh_scan_files(moh);
+		if (res <= 0) {
+			if (res == 0) {
+				if (option_verbose > 2)
+					ast_verbose(VERBOSE_PREFIX_3 "Files not found in %s for moh class:%s\n", moh->dir, moh->name);
+			}
 			ast_moh_free_class(&moh);
 			return -1;
 		}
@@ -1564,14 +1567,6 @@
 			AST_RWLIST_REMOVE_CURRENT(list);
 			if (!moh->inuse)
 				ast_moh_destroy_one(moh);
-		} else if (moh->total_files) {
-			if (moh_scan_files(moh) <= 0) {
-				ast_log(LOG_WARNING, "No files found for class '%s'\n", moh->name);
-				moh->delete = 1;
-				AST_LIST_REMOVE_CURRENT(list);
-				if (!moh->inuse)
-					ast_moh_destroy_one(moh);
-			}
 		}
 	}
 	AST_RWLIST_TRAVERSE_SAFE_END
@@ -1615,7 +1610,31 @@
 
 static int unload_module(void)
 {
-	return -1;
+	int res = 0;
+	struct mohclass *class = NULL;
+
+	AST_RWLIST_WRLOCK(&mohclasses);
+	AST_LIST_TRAVERSE(&mohclasses, class, list) {
+		if (class->inuse > 0) {
+			res = -1;
+			break;
+		}
+	}
+	AST_RWLIST_UNLOCK(&mohclasses);
+	if (res < 0) {
+		ast_log(LOG_WARNING, "Unable to unload res_musiconhold due to active MOH channels\n");
+		return res;
+	}
+
+	ast_uninstall_music_functions();
+	ast_moh_destroy();
+	res = ast_unregister_application(play_moh);
+	res |= ast_unregister_application(wait_moh);
+	res |= ast_unregister_application(set_moh);
+	res |= ast_unregister_application(start_moh);
+	res |= ast_unregister_application(stop_moh);
+	ast_cli_unregister_multiple(cli_moh, sizeof(cli_moh) / sizeof(struct ast_cli_entry));
+	return res;
 }
 
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Music On Hold Resource",




More information about the asterisk-commits mailing list