summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins2 <jenkins2@gerrit.asterisk.org>2018-03-14 07:00:57 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2018-03-14 07:00:57 -0500
commit15bf51af739b25cd1006c54731468ead2e65940f (patch)
tree29af592fba0a9abad77377ba7199f9ab5ddeed1c
parent681bdc8dbff2c0cf5254b1d8b599202b7ac4cdff (diff)
parentfee929c8acd788a77982b537953bf4053242057e (diff)
Merge "core: Remove non-critical cleanup from startup aborts."
-rw-r--r--include/asterisk/_private.h1
-rw-r--r--main/asterisk.c1
-rw-r--r--main/cel.c9
-rw-r--r--main/core_local.c7
-rw-r--r--main/devicestate.c5
-rw-r--r--main/dns_core.c38
-rw-r--r--main/dns_system_resolver.c1
-rw-r--r--main/dsp.c15
-rw-r--r--main/features.c9
-rw-r--r--main/features_config.c4
-rw-r--r--main/indications.c6
-rw-r--r--main/media_cache.c5
-rw-r--r--main/pbx_builtins.c1
-rw-r--r--main/sorcery.c3
14 files changed, 34 insertions, 71 deletions
diff --git a/include/asterisk/_private.h b/include/asterisk/_private.h
index e989b16fd..b9f552dd1 100644
--- a/include/asterisk/_private.h
+++ b/include/asterisk/_private.h
@@ -59,6 +59,7 @@ int ast_test_init(void); /*!< Provided by test.c */
int ast_msg_init(void); /*!< Provided by message.c */
void ast_msg_shutdown(void); /*!< Provided by message.c */
int aco_init(void); /*!< Provided by config_options.c */
+int dns_core_init(void); /*!< Provided by dns_core.c */
/*!
* \brief Initialize the bridging system.
diff --git a/main/asterisk.c b/main/asterisk.c
index e348b2199..bec992f68 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -4548,6 +4548,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
check_init(ast_parking_stasis_init(), "Parking Core");
check_init(ast_device_state_engine_init(), "Device State Engine");
check_init(ast_presence_state_engine_init(), "Presence State Engine");
+ check_init(dns_core_init(), "DNS Resolver Core");
check_init(ast_dns_system_resolver_init(), "Default DNS resolver");
check_init(ast_security_stasis_init(), "Security Stasis Topic and Events");
check_init(ast_image_init(), "Image");
diff --git a/main/cel.c b/main/cel.c
index e4fae6dca..2813e60c4 100644
--- a/main/cel.c
+++ b/main/cel.c
@@ -1563,7 +1563,6 @@ int ast_cel_engine_init(void)
ao2_global_obj_replace_unref(cel_linkedids, container);
ao2_cleanup(container);
if (!container) {
- cel_engine_cleanup();
return -1;
}
@@ -1572,17 +1571,14 @@ int ast_cel_engine_init(void)
ao2_global_obj_replace_unref(cel_dialstatus_store, container);
ao2_cleanup(container);
if (!container) {
- cel_engine_cleanup();
return -1;
}
if (STASIS_MESSAGE_TYPE_INIT(cel_generic_type)) {
- cel_engine_cleanup();
return -1;
}
if (ast_cli_register(&cli_status)) {
- cel_engine_cleanup();
return -1;
}
@@ -1590,12 +1586,10 @@ int ast_cel_engine_init(void)
ao2_global_obj_replace_unref(cel_backends, container);
ao2_cleanup(container);
if (!container) {
- cel_engine_cleanup();
return -1;
}
if (aco_info_init(&cel_cfg_info)) {
- cel_engine_cleanup();
return -1;
}
@@ -1608,7 +1602,6 @@ int ast_cel_engine_init(void)
struct cel_config *cel_cfg = cel_config_alloc();
if (!cel_cfg) {
- cel_engine_cleanup();
return -1;
}
@@ -1621,12 +1614,10 @@ int ast_cel_engine_init(void)
}
if (create_subscriptions()) {
- cel_engine_cleanup();
return -1;
}
if (ast_cel_check_enabled() && create_routes()) {
- cel_engine_cleanup();
return -1;
}
diff --git a/main/core_local.c b/main/core_local.c
index 23c7cce9d..c3fa15f6c 100644
--- a/main/core_local.c
+++ b/main/core_local.c
@@ -1049,7 +1049,6 @@ static void local_shutdown(void)
int ast_local_init(void)
{
-
if (STASIS_MESSAGE_TYPE_INIT(ast_local_optimization_begin_type)) {
return -1;
}
@@ -1069,17 +1068,13 @@ int ast_local_init(void)
locals = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_MUTEX, 0, NULL, locals_cmp_cb);
if (!locals) {
- ao2_cleanup(local_tech.capabilities);
- local_tech.capabilities = NULL;
return -1;
}
/* Make sure we can register our channel type */
if (ast_channel_register(&local_tech)) {
ast_log(LOG_ERROR, "Unable to register channel class 'Local'\n");
- ao2_ref(locals, -1);
- ao2_cleanup(local_tech.capabilities);
- local_tech.capabilities = NULL;
+
return -1;
}
ast_cli_register_multiple(cli_local, ARRAY_LEN(cli_local));
diff --git a/main/devicestate.c b/main/devicestate.c
index 1db9a1937..5df34497a 100644
--- a/main/devicestate.c
+++ b/main/devicestate.c
@@ -911,24 +911,20 @@ int devstate_init(void)
}
device_state_topic_all = stasis_topic_create("ast_device_state_topic");
if (!device_state_topic_all) {
- devstate_cleanup();
return -1;
}
device_state_topic_pool = stasis_topic_pool_create(ast_device_state_topic_all());
if (!device_state_topic_pool) {
- devstate_cleanup();
return -1;
}
device_state_cache = stasis_cache_create_full(device_state_get_id,
device_state_aggregate_calc, device_state_aggregate_publish);
if (!device_state_cache) {
- devstate_cleanup();
return -1;
}
device_state_topic_cached = stasis_caching_topic_create(ast_device_state_topic_all(),
device_state_cache);
if (!device_state_topic_cached) {
- devstate_cleanup();
return -1;
}
@@ -936,7 +932,6 @@ int devstate_init(void)
devstate_change_cb, NULL);
if (!devstate_message_sub) {
ast_log(LOG_ERROR, "Failed to create subscription creating uncached device state aggregate events.\n");
- devstate_cleanup();
return -1;
}
diff --git a/main/dns_core.c b/main/dns_core.c
index 3e270aff7..6f37a5d46 100644
--- a/main/dns_core.c
+++ b/main/dns_core.c
@@ -29,6 +29,7 @@
#include "asterisk.h"
+#include "asterisk/_private.h"
#include "asterisk/linkedlists.h"
#include "asterisk/astobj2.h"
#include "asterisk/strings.h"
@@ -537,6 +538,22 @@ static void dns_shutdown(void)
}
}
+int dns_core_init(void)
+{
+ sched = ast_sched_context_create();
+ if (!sched) {
+ return -1;
+ }
+
+ if (ast_sched_start_thread(sched)) {
+ return -1;
+ }
+
+ ast_register_cleanup(dns_shutdown);
+
+ return 0;
+}
+
int ast_dns_resolver_register(struct ast_dns_resolver *resolver)
{
struct ast_dns_resolver *iter;
@@ -559,27 +576,6 @@ int ast_dns_resolver_register(struct ast_dns_resolver *resolver)
AST_RWLIST_WRLOCK(&resolvers);
- /* On the first registration of a resolver start a scheduler for recurring queries */
- if (AST_LIST_EMPTY(&resolvers) && !sched) {
- sched = ast_sched_context_create();
- if (!sched) {
- ast_log(LOG_ERROR, "DNS resolver '%s' could not be registered: Failed to create scheduler for recurring DNS queries\n",
- resolver->name);
- AST_RWLIST_UNLOCK(&resolvers);
- return -1;
- }
-
- if (ast_sched_start_thread(sched)) {
- ast_log(LOG_ERROR, "DNS resolver '%s' could not be registered: Failed to start thread for recurring DNS queries\n",
- resolver->name);
- dns_shutdown();
- AST_RWLIST_UNLOCK(&resolvers);
- return -1;
- }
-
- ast_register_cleanup(dns_shutdown);
- }
-
AST_LIST_TRAVERSE(&resolvers, iter, next) {
if (!strcmp(iter->name, resolver->name)) {
ast_log(LOG_ERROR, "A DNS resolver with the name '%s' is already registered\n", resolver->name);
diff --git a/main/dns_system_resolver.c b/main/dns_system_resolver.c
index 9358577b6..8cb92c058 100644
--- a/main/dns_system_resolver.c
+++ b/main/dns_system_resolver.c
@@ -255,7 +255,6 @@ int ast_dns_system_resolver_init(void)
/* Return error if the task processor failed to instantiate */
if (!dns_system_resolver_tp) {
- dns_system_resolver_destroy();
return DNS_SYSTEM_RESOLVER_FAILURE;
}
diff --git a/main/dsp.c b/main/dsp.c
index 8b39fe55e..66d95adc2 100644
--- a/main/dsp.c
+++ b/main/dsp.c
@@ -2402,17 +2402,18 @@ static void test_dsp_shutdown(void)
int ast_dsp_init(void)
{
- int res = _dsp_init(0);
+ if (_dsp_init(0)) {
+ return -1;
+ }
#ifdef TEST_FRAMEWORK
- if (!res) {
- AST_TEST_REGISTER(test_dsp_fax_detect);
- AST_TEST_REGISTER(test_dsp_dtmf_detect);
+ AST_TEST_REGISTER(test_dsp_fax_detect);
+ AST_TEST_REGISTER(test_dsp_dtmf_detect);
- ast_register_cleanup(test_dsp_shutdown);
- }
+ ast_register_cleanup(test_dsp_shutdown);
#endif
- return res;
+
+ return 0;
}
int ast_dsp_reload(void)
diff --git a/main/features.c b/main/features.c
index 516c64a4a..35039e0fa 100644
--- a/main/features.c
+++ b/main/features.c
@@ -1164,17 +1164,10 @@ int ast_features_init(void)
int res;
res = ast_features_config_init();
- if (res) {
- return res;
- }
res |= ast_register_application2(app_bridge, bridge_exec, NULL, NULL, NULL);
res |= ast_manager_register_xml_core("Bridge", EVENT_FLAG_CALL, action_bridge);
- if (res) {
- features_shutdown();
- } else {
- ast_register_cleanup(features_shutdown);
- }
+ ast_register_cleanup(features_shutdown);
return res;
}
diff --git a/main/features_config.c b/main/features_config.c
index a773f497f..195fbaceb 100644
--- a/main/features_config.c
+++ b/main/features_config.c
@@ -2000,9 +2000,5 @@ int ast_features_config_init(void)
res |= __ast_custom_function_register(&featuremap_function, NULL);
res |= ast_cli_register_multiple(cli_features_config, ARRAY_LEN(cli_features_config));
- if (res) {
- ast_features_config_shutdown();
- }
-
return res;
}
diff --git a/main/indications.c b/main/indications.c
index bde6e012d..89710584b 100644
--- a/main/indications.c
+++ b/main/indications.c
@@ -1130,13 +1130,13 @@ static void indications_shutdown(void)
/*! \brief Load indications module */
int ast_indications_init(void)
{
- if (!(ast_tone_zones = ao2_container_alloc(NUM_TONE_ZONE_BUCKETS,
- ast_tone_zone_hash, ast_tone_zone_cmp))) {
+ ast_tone_zones = ao2_container_alloc(NUM_TONE_ZONE_BUCKETS,
+ ast_tone_zone_hash, ast_tone_zone_cmp);
+ if (!ast_tone_zones) {
return -1;
}
if (load_indications(0)) {
- indications_shutdown();
return -1;
}
diff --git a/main/media_cache.c b/main/media_cache.c
index 90057dc6f..e93d1a02f 100644
--- a/main/media_cache.c
+++ b/main/media_cache.c
@@ -645,7 +645,7 @@ static struct ast_cli_entry cli_media_cache[] = {
*/
static void media_cache_shutdown(void)
{
- ao2_ref(media_cache, -1);
+ ao2_cleanup(media_cache);
media_cache = NULL;
ast_cli_unregister_multiple(cli_media_cache, ARRAY_LEN(cli_media_cache));
@@ -653,7 +653,7 @@ static void media_cache_shutdown(void)
int ast_media_cache_init(void)
{
- ast_register_atexit(media_cache_shutdown);
+ ast_register_cleanup(media_cache_shutdown);
media_cache = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, AO2_BUCKETS,
ast_sorcery_object_id_hash, ast_sorcery_object_id_compare);
@@ -662,7 +662,6 @@ int ast_media_cache_init(void)
}
if (ast_cli_register_multiple(cli_media_cache, ARRAY_LEN(cli_media_cache))) {
- ao2_ref(media_cache, -1);
return -1;
}
diff --git a/main/pbx_builtins.c b/main/pbx_builtins.c
index 9d43c10ff..7f76b9776 100644
--- a/main/pbx_builtins.c
+++ b/main/pbx_builtins.c
@@ -1509,7 +1509,6 @@ int load_pbx_builtins(void)
for (x = 0; x < ARRAY_LEN(builtins); x++) {
if (ast_register_application2(builtins[x].name, builtins[x].execute, NULL, NULL, NULL)) {
ast_log(LOG_ERROR, "Unable to register builtin application '%s'\n", builtins[x].name);
- unload_pbx_builtins();
return -1;
}
}
diff --git a/main/sorcery.c b/main/sorcery.c
index c79675cd8..902870793 100644
--- a/main/sorcery.c
+++ b/main/sorcery.c
@@ -388,20 +388,17 @@ int ast_sorcery_init(void)
wizards = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, WIZARD_BUCKETS,
ast_sorcery_internal_wizard_hash_fn, NULL, ast_sorcery_internal_wizard_cmp_fn);
if (!wizards) {
- sorcery_cleanup();
return -1;
}
observers = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, NULL, NULL);
if (!observers) {
- sorcery_cleanup();
return -1;
}
instances = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, INSTANCE_BUCKETS,
sorcery_proxy_hash_fn, NULL, sorcery_proxy_cmp_fn);
if (!instances) {
- sorcery_cleanup();
return -1;
}