[asterisk-commits] qwell: branch 1.4 r114594 - /branches/1.4/res/res_musiconhold.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Apr 23 13:28:44 CDT 2008
Author: qwell
Date: Wed Apr 23 13:28:44 2008
New Revision: 114594
URL: http://svn.digium.com/view/asterisk?view=rev&rev=114594
Log:
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:
branches/1.4/res/res_musiconhold.c
Modified: branches/1.4/res/res_musiconhold.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/res/res_musiconhold.c?view=diff&rev=114594&r1=114593&r2=114594
==============================================================================
--- branches/1.4/res/res_musiconhold.c (original)
+++ branches/1.4/res/res_musiconhold.c Wed Apr 23 13:28:44 2008
@@ -869,18 +869,16 @@
int x;
#endif
struct mohclass *mohclass = NULL;
+ int res = 0;
AST_LIST_LOCK(&mohclasses);
if ((mohclass = get_mohbyname(moh->name, 0))) {
- mohclass->delete = 0;
- 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_LIST_UNLOCK(&mohclasses);
- return -1;
+ if (!mohclass->delete) {
+ ast_log(LOG_WARNING, "Music on Hold class '%s' already exists\n", moh->name);
+ free(moh);
+ AST_LIST_UNLOCK(&mohclasses);
+ return -1;
+ }
}
AST_LIST_UNLOCK(&mohclasses);
@@ -888,7 +886,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;
}
@@ -1273,14 +1276,6 @@
AST_LIST_REMOVE_CURRENT(&mohclasses, 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(&mohclasses, list);
- if (!moh->inuse)
- ast_moh_destroy_one(moh);
- }
}
}
AST_LIST_TRAVERSE_SAFE_END
@@ -1324,7 +1319,31 @@
static int unload_module(void)
{
- return -1;
+ int res = 0;
+ struct mohclass *class = NULL;
+
+ AST_LIST_LOCK(&mohclasses);
+ AST_LIST_TRAVERSE(&mohclasses, class, list) {
+ if (class->inuse > 0) {
+ res = -1;
+ break;
+ }
+ }
+ AST_LIST_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(app0);
+ res |= ast_unregister_application(app1);
+ res |= ast_unregister_application(app2);
+ res |= ast_unregister_application(app3);
+ res |= ast_unregister_application(app4);
+ ast_cli_unregister_multiple(cli_moh, sizeof(cli_moh) / sizeof(struct ast_cli_entry));
+ return res;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Music On Hold Resource",
More information about the asterisk-commits
mailing list