diff --git a/main/asterisk.c b/main/asterisk.c index dd66867b84c356492c7a02288aab8db0af261cb1..bc7ac8bc72f705a45e4ef7db80ff63ccdf68eae4 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -4617,9 +4617,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"); + /* * This has to load after the dynamic modules load, as items in the media * cache can't be constructed from items in the AstDB without their diff --git a/main/sounds_index.c b/main/sounds_index.c index c7f9f4dd950ec28c577d4e4fb6f74609b2b571dc..c792c1bbd296a9aea80428eea6658e369b56eb41 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); }