]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add missing checks during startup. 10/3410/1
authorCorey Farrell <git@cfware.com>
Wed, 3 Aug 2016 20:38:21 +0000 (16:38 -0400)
committerCorey Farrell <git@cfware.com>
Wed, 3 Aug 2016 20:39:35 +0000 (16:39 -0400)
This ensures startup is canceled due to allocation failures from the
following initializations.
* channel.c: ast_channels_init
* format.c: ast_format_attr_init and ast_format_list_init

ASTERISK-26265 #close

Change-Id: I911ed08fa2a3be35de55903e0225957bcdbe9611

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

index 1bc24337f0415858504178cf2d84857617307277..35bc14a625be2cd88524183980f27627eb56cb2c 100644 (file)
@@ -24,7 +24,7 @@ void clean_time_zones(void);                  /*!< Provided by localtime.c */
 int init_framer(void);                 /*!< Provided by frame.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 0e33d0ca9da102dd748e5e8d1fc8ce93c4e8c276..10f437b77128bd267e2a12dc4e000d117b761122 100644 (file)
@@ -4235,10 +4235,17 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
 
        threadstorage_init();
 
-       ast_format_attr_init();
-       ast_format_list_init();
-       ast_rtp_engine_init();
+       if (ast_format_attr_init()) {
+               printf("Failed: ast_format_attr_init\n%s", term_quit());
+               exit(1);
+       }
 
+       if (ast_format_list_init()) {
+               printf("Failed: ast_format_list_init\n%s", term_quit());
+               exit(1);
+       }
+
+       ast_rtp_engine_init();
        ast_autoservice_init();
 
        if (ast_timing_init()) {
@@ -4272,7 +4279,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 ((moduleresult = load_modules(1))) {         /* Load modules, pre-load only */
                printf("Failed: load_modules(1)\n%s", term_quit());
index af7845a2feb3d2601949af846b84d0b5a2d850ce..ecb256531ede746815b198edf1459ddf4beac4fa 100644 (file)
@@ -8671,10 +8671,13 @@ static void channels_shutdown(void)
        }
 }
 
-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) {
+               return -1;
+       }
 
        ast_cli_register_multiple(cli_channel, ARRAY_LEN(cli_channel));
 
@@ -8683,6 +8686,8 @@ void ast_channels_init(void)
        ast_plc_reload();
 
        ast_register_cleanup(channels_shutdown);
+
+       return 0;
 }
 
 /*! \brief Print call group and pickup group ---*/