diff --git a/main/asterisk.c b/main/asterisk.c index 0abb3600db..3807b0af76 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -4701,9 +4701,14 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou check_init(init_manager(), "Asterisk Manager Interface"); check_init(ast_enum_init(), "ENUM Support"); check_init(ast_cc_init(), "Call Completion Supplementary Services"); - check_init(ast_sounds_index_init(), "Sounds Indexer"); check_init(load_modules(0), "Module"); + /* + * This is initialized after the dynamic modules load to avoid repeatedly + * reindexing sounds for every format module load. + */ + check_init(ast_sounds_index_init(), "Sounds Indexer"); + /* loads the cli_permissoins.conf file needed to implement cli restrictions. */ ast_cli_perms_init(0); diff --git a/main/sounds_index.c b/main/sounds_index.c index c7f9f4dd95..c792c1bbd2 100644 --- a/main/sounds_index.c +++ b/main/sounds_index.c @@ -285,13 +285,15 @@ static void sounds_cleanup(void) static void format_update_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message) { - ast_sounds_reindex(); + /* Reindexing during shutdown is pointless. */ + if (!ast_shutting_down()) { + ast_sounds_reindex(); + } } int ast_sounds_index_init(void) { int res = 0; - sounds_index = NULL; if (ast_sounds_reindex()) { return -1; } @@ -328,6 +330,5 @@ int ast_sounds_index_init(void) struct ast_media_index *ast_sounds_get_index(void) { - ao2_ref(sounds_index, +1); - return sounds_index; + return ao2_bump(sounds_index); }