summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2016-08-03 16:39:46 -0400
committerCorey Farrell <git@cfware.com>2016-08-03 16:39:46 -0400
commit805f105f8898beb0be0cdf5a7df653fdb03f730e (patch)
tree5bba3aa108eae0332e3e74fa62b7adae4c625a2e
parent9dc8cfabd5fa240a26972dac5c6ce396dadb7d75 (diff)
Add missing checks during startup.
This ensures startup is canceled due to allocation failures from the following initializations. * channel.c: ast_channels_init * config_options.c: aco_init ASTERISK-26265 #close Change-Id: I911ed08fa2a3be35de55903e0225957bcdbe9611
-rw-r--r--include/asterisk/_private.h2
-rw-r--r--main/asterisk.c10
-rw-r--r--main/channel.c8
3 files changed, 14 insertions, 6 deletions
diff --git a/include/asterisk/_private.h b/include/asterisk/_private.h
index ebee96cc4..9255dc1de 100644
--- a/include/asterisk/_private.h
+++ b/include/asterisk/_private.h
@@ -29,7 +29,7 @@ void logger_queue_start(void); /*!< Provided by logger.c */
void clean_time_zones(void); /*!< Provided by localtime.c */
int ast_term_init(void); /*!< Provided by term.c */
int astdb_init(void); /*!< Provided by db.c */
-void ast_channels_init(void); /*!< Provided by channel.c */
+int ast_channels_init(void); /*!< Provided by channel.c */
void ast_builtins_init(void); /*!< Provided by cli.c */
int ast_cli_perms_init(int reload); /*!< Provided by cli.c */
int dnsmgr_init(void); /*!< Provided by dnsmgr.c */
diff --git a/main/asterisk.c b/main/asterisk.c
index 5f631ee5b..772c3dce9 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -4504,7 +4504,10 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
exit(1);
}
- aco_init();
+ if (aco_init()) {
+ printf("Failed: aco_init\n%s", term_quit());
+ exit(1);
+ }
if (ast_bucket_init()) {
printf("Failed: ast_bucket_init\n%s", term_quit());
@@ -4598,7 +4601,10 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
exit(1);
}
- ast_channels_init();
+ if (ast_channels_init()) {
+ printf("Failed: ast_channels_init\n%s", term_quit());
+ exit(1);
+ }
if (ast_endpoint_init()) {
printf ("Failed: ast_endpoint_init\n%s", term_quit());
diff --git a/main/channel.c b/main/channel.c
index 73f795ffa..853935da3 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -7803,13 +7803,14 @@ static void channels_shutdown(void)
ast_channel_unregister(&surrogate_tech);
}
-void ast_channels_init(void)
+int ast_channels_init(void)
{
channels = ao2_container_alloc(NUM_CHANNEL_BUCKETS,
ast_channel_hash_cb, ast_channel_cmp_cb);
- if (channels) {
- ao2_container_register("channels", channels, prnt_channel_key);
+ if (!channels) {
+ return -1;
}
+ ao2_container_register("channels", channels, prnt_channel_key);
ast_channel_register(&surrogate_tech);
@@ -7823,6 +7824,7 @@ void ast_channels_init(void)
ast_register_cleanup(channels_shutdown);
+ return 0;
}
/*! \brief Print call group and pickup group ---*/