From 13cdf3e8a168345ce0eb8e8fb70becec5c1c99a5 Mon Sep 17 00:00:00 2001 From: Walter Doekes Date: Thu, 24 Mar 2016 13:51:00 +0100 Subject: [PATCH] musiconhold: Only warn if music class is not found in memory and database. The log message when a MusicOnHold music class was not found was changed from debug level to WARNING level in Asterisk 11.19 and 13.5. For those using realtime musiconhold, this message is wrong because it warns before checking the database. This changeset delays the warning until after the database has been checked. Reported-by: Conrad de Wet ASTERISK-25444 #close Change-Id: I6cfb2db2f9cfbd2bb3d30566ecae361c4abf6dbf --- res/res_musiconhold.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index 4e5056358f..f124d58f23 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -1379,6 +1379,18 @@ static struct mohclass *_moh_class_malloc(const char *file, int line, const char return class; } +static struct ast_variable *load_realtime_musiconhold(const char *name) +{ + struct ast_variable *var = ast_load_realtime("musiconhold", "name", name, SENTINEL); + if (!var) { + ast_log(LOG_WARNING, + "Music on Hold class '%s' not found in memory/database. " + "Verify your configuration.\n", + name); + } + return var; +} + static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, const char *interpclass) { struct mohclass *mohclass = NULL; @@ -1387,6 +1399,7 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con int res = 0; int i; int realtime_possible = ast_check_realtime("musiconhold"); + int warn_if_not_in_memory = !realtime_possible; const char *classes[] = {NULL, NULL, interpclass, "default"}; if (ast_test_flag(global_flags, MOH_PREFERCHANNELCLASS)) { @@ -1414,9 +1427,9 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con for (i = 0; i < ARRAY_LEN(classes); ++i) { if (!ast_strlen_zero(classes[i])) { - mohclass = get_mohbyname(classes[i], 1, 0); + mohclass = get_mohbyname(classes[i], warn_if_not_in_memory, 0); if (!mohclass && realtime_possible) { - var = ast_load_realtime("musiconhold", "name", classes[i], SENTINEL); + var = load_realtime_musiconhold(classes[i]); } if (mohclass || var) { break;