Merge "res_sorcery_memory_cache.c: Shutdown in a less crash potential order." into 13

This commit is contained in:
Joshua Colp
2015-10-02 16:28:28 -05:00
committed by Gerrit Code Review

View File

@@ -2480,22 +2480,6 @@ cleanup:
static int unload_module(void) static int unload_module(void)
{ {
if (sched) {
ast_sched_context_destroy(sched);
sched = NULL;
}
ao2_cleanup(caches);
ast_sorcery_wizard_unregister(&memory_cache_object_wizard);
ast_cli_unregister_multiple(cli_memory_cache, ARRAY_LEN(cli_memory_cache));
ast_manager_unregister("SorceryMemoryCacheExpireObject");
ast_manager_unregister("SorceryMemoryCacheExpire");
ast_manager_unregister("SorceryMemoryCacheStaleObject");
ast_manager_unregister("SorceryMemoryCacheStale");
AST_TEST_UNREGISTER(open_with_valid_options); AST_TEST_UNREGISTER(open_with_valid_options);
AST_TEST_UNREGISTER(open_with_invalid_options); AST_TEST_UNREGISTER(open_with_invalid_options);
AST_TEST_UNREGISTER(create_and_retrieve); AST_TEST_UNREGISTER(create_and_retrieve);
@@ -2505,6 +2489,27 @@ static int unload_module(void)
AST_TEST_UNREGISTER(expiration); AST_TEST_UNREGISTER(expiration);
AST_TEST_UNREGISTER(stale); AST_TEST_UNREGISTER(stale);
ast_manager_unregister("SorceryMemoryCacheExpireObject");
ast_manager_unregister("SorceryMemoryCacheExpire");
ast_manager_unregister("SorceryMemoryCacheStaleObject");
ast_manager_unregister("SorceryMemoryCacheStale");
ast_cli_unregister_multiple(cli_memory_cache, ARRAY_LEN(cli_memory_cache));
ast_sorcery_wizard_unregister(&memory_cache_object_wizard);
/*
* XXX There is the potential to leak memory if there are pending
* next-cache-expiration and stale-cache-update tasks in the scheduler.
*/
if (sched) {
ast_sched_context_destroy(sched);
sched = NULL;
}
ao2_cleanup(caches);
caches = NULL;
return 0; return 0;
} }
@@ -2512,6 +2517,14 @@ static int load_module(void)
{ {
int res; int res;
caches = ao2_container_alloc(CACHES_CONTAINER_BUCKET_SIZE, sorcery_memory_cache_hash,
sorcery_memory_cache_cmp);
if (!caches) {
ast_log(LOG_ERROR, "Failed to create container for configured caches\n");
unload_module();
return AST_MODULE_LOAD_DECLINE;
}
sched = ast_sched_context_create(); sched = ast_sched_context_create();
if (!sched) { if (!sched) {
ast_log(LOG_ERROR, "Failed to create scheduler for cache management\n"); ast_log(LOG_ERROR, "Failed to create scheduler for cache management\n");
@@ -2525,14 +2538,6 @@ static int load_module(void)
return AST_MODULE_LOAD_DECLINE; return AST_MODULE_LOAD_DECLINE;
} }
caches = ao2_container_alloc(CACHES_CONTAINER_BUCKET_SIZE, sorcery_memory_cache_hash,
sorcery_memory_cache_cmp);
if (!caches) {
ast_log(LOG_ERROR, "Failed to create container for configured caches\n");
unload_module();
return AST_MODULE_LOAD_DECLINE;
}
if (ast_sorcery_wizard_register(&memory_cache_object_wizard)) { if (ast_sorcery_wizard_register(&memory_cache_object_wizard)) {
unload_module(); unload_module();
return AST_MODULE_LOAD_DECLINE; return AST_MODULE_LOAD_DECLINE;