summaryrefslogtreecommitdiff
path: root/res/res_musiconhold.c
diff options
context:
space:
mode:
authorDaniel Journo <dan@keshercommunications.com>2017-03-26 00:01:06 +0000
committerDaniel Journo <dan@keshercommunications.com>2017-04-03 17:43:50 -0500
commit6c3ae397cbd8c5655e553e3ae7684bedbdfef178 (patch)
treea4b2de24004ad657b417be8cf166f0aa13bc4b5d /res/res_musiconhold.c
parenta889621b14a55994fcfe68341af3cef2484ff74b (diff)
Unused realtime MOH classes not purged on 'moh reload'
Purge Realtime MOH classes on 'moh reload' even when musiconhold.conf hasn't changed. ASTERISK-25974 #close Change-Id: I42c78ea76528473a656f204595956c9eedcf3246
Diffstat (limited to 'res/res_musiconhold.c')
-rw-r--r--res/res_musiconhold.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 992737b15..71f4691af 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -155,6 +155,7 @@ struct moh_files_state {
/* Custom astobj2 flag */
#define MOH_NOTDELETED (1 << 30) /*!< Find only records that aren't deleted? */
+#define MOH_REALTIME (1 << 31) /*!< Find only records that are realtime */
static struct ast_flags global_flags[1] = {{0}}; /*!< global MOH_ flags */
@@ -1676,7 +1677,9 @@ static int moh_class_mark(void *obj, void *arg, int flags)
{
struct mohclass *class = obj;
- class->delete = 1;
+ if ( ((flags & MOH_REALTIME) && class->realtime) || !(flags & MOH_REALTIME) ) {
+ class->delete = 1;
+ }
return 0;
}
@@ -1692,22 +1695,27 @@ static int load_moh_classes(int reload)
{
struct ast_config *cfg;
struct ast_variable *var;
- struct mohclass *class;
+ struct mohclass *class;
char *cat;
int numclasses = 0;
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
cfg = ast_config_load("musiconhold.conf", config_flags);
- if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
+ if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
if (ast_check_realtime("musiconhold") && reload) {
- ao2_t_callback(mohclasses, OBJ_NODATA, moh_class_mark, NULL, "Mark deleted classes");
+ ao2_t_callback(mohclasses, OBJ_NODATA | MOH_REALTIME, moh_class_mark, NULL, "Mark realtime classes for deletion");
ao2_t_callback(mohclasses, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, moh_classes_delete_marked, NULL, "Purge marked classes");
}
+ moh_rescan_files();
return 0;
}
- if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
- moh_rescan_files();
+
+ if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
+ if (ast_check_realtime("musiconhold") && reload) {
+ ao2_t_callback(mohclasses, OBJ_NODATA, moh_class_mark, NULL, "Mark deleted classes");
+ ao2_t_callback(mohclasses, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, moh_classes_delete_marked, NULL, "Purge marked classes");
+ }
return 0;
}