Add missing checks during startup.
authorCorey Farrell <git@cfware.com>
Wed, 3 Aug 2016 20:41:04 +0000 (16:41 -0400)
committerCorey Farrell <git@cfware.com>
Wed, 3 Aug 2016 21:11:38 +0000 (16:11 -0500)
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

include/asterisk/_private.h
main/asterisk.c
main/channel.c

index 6dbf24f..36b316f 100644 (file)
@@ -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 */
index 850003b..05381fc 100644 (file)
@@ -4452,7 +4452,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 (init_logger()) {            /* Start logging subsystem */
                printf("Failed: init_logger\n%s", term_quit());
@@ -4546,7 +4549,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());
index 911c269..1f18d53 100644 (file)
@@ -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 ---*/