sounds_index: Avoid repeatedly reindexing.

The sounds index is rebuilt each time a format is registered or
unregistered.  This causes the index to be repeatedly rebuilt during
startup and shutdown.

This patch significantly reduces the work done by delaying sound index
initialization until after modules are loaded.  This way a reindex only
occurs if a format module is loaded after startup.  We also skip
reindexing when format modules are unloaded during shutdown.

Change-Id: I585fd6ee04200612ab1490dc804f76805f89cf0a
This commit is contained in:
Corey Farrell
2017-12-06 15:49:32 -05:00
parent 2af59ebb3a
commit ab191e9782
2 changed files with 11 additions and 5 deletions

View File

@@ -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(init_manager(), "Asterisk Manager Interface");
check_init(ast_enum_init(), "ENUM Support"); check_init(ast_enum_init(), "ENUM Support");
check_init(ast_cc_init(), "Call Completion Supplementary Services"); check_init(ast_cc_init(), "Call Completion Supplementary Services");
check_init(ast_sounds_index_init(), "Sounds Indexer");
check_init(load_modules(0), "Module"); 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 * 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 * cache can't be constructed from items in the AstDB without their

View File

@@ -285,13 +285,15 @@ static void sounds_cleanup(void)
static void format_update_cb(void *data, struct stasis_subscription *sub, static void format_update_cb(void *data, struct stasis_subscription *sub,
struct stasis_message *message) struct stasis_message *message)
{ {
/* Reindexing during shutdown is pointless. */
if (!ast_shutting_down()) {
ast_sounds_reindex(); ast_sounds_reindex();
} }
}
int ast_sounds_index_init(void) int ast_sounds_index_init(void)
{ {
int res = 0; int res = 0;
sounds_index = NULL;
if (ast_sounds_reindex()) { if (ast_sounds_reindex()) {
return -1; return -1;
} }
@@ -328,6 +330,5 @@ int ast_sounds_index_init(void)
struct ast_media_index *ast_sounds_get_index(void) struct ast_media_index *ast_sounds_get_index(void)
{ {
ao2_ref(sounds_index, +1); return ao2_bump(sounds_index);
return sounds_index;
} }