Index: res/res_musiconhold.c =================================================================== --- res/res_musiconhold.c (revision 73759) +++ res/res_musiconhold.c (working copy) @@ -914,6 +914,19 @@ } } +static struct mohclass *moh_getclass(const char *class) +{ + struct mohclass *mohclass; + if (!ast_strlen_zero(class)) { + if (!(mohclass = moh_getbyname(class))) { + ast_log(LOG_WARNING, "No Class: %s\n", class); + return NULL; + } else + return mohclass; + } else + return NULL; +} + static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, const char *interpclass) { struct mohclass *mohclass; @@ -930,21 +943,19 @@ * option. * 4) The default class. */ - if (!ast_strlen_zero(chan->musicclass)) + AST_LIST_LOCK(&mohclasses); + if (mohclass = moh_getclass(chan->musicclass)) class = chan->musicclass; - else if (!ast_strlen_zero(mclass)) + else if (mohclass = moh_getclass(mclass)) class = mclass; - else if (!ast_strlen_zero(interpclass)) + else if (mohclass = moh_getclass(interpclass)) class = interpclass; - else - class = "default"; - - AST_LIST_LOCK(&mohclasses); - mohclass = get_mohbyname(class); + else if (mohclass = moh_getclass("default")) + class = "default"; AST_LIST_UNLOCK(&mohclasses); if (!mohclass) { - ast_log(LOG_WARNING, "No class: %s\n", class); + ast_log(LOG_WARNING, "Could not find acceptable Music on Hold class, ending Music on Hold\n"); return -1; }