res_corosync: Add check for config file before calling corosync apis
authorGeorge Joseph <george.joseph@fairview5.com>
Wed, 22 Apr 2015 21:22:10 +0000 (15:22 -0600)
committerMatt Jordan <mjordan@digium.com>
Thu, 23 Apr 2015 11:30:29 +0000 (06:30 -0500)
On some systems, res_corosync isn't compatible with the installed version of
corosync so corosync_cfg_initialize fails, load_module returns LOAD_FAILURE,
and Asterisk terminates.  The work around has been to remember to add
res_corosync as a noload in modules.conf.  A better solution though is to have
res_corosync check for its config file before attempting to call corosync apis
and return LOAD_DECLINE if there's no config file.  This lets Asterisk loading
continue.

If you have a res_corosync.conf file and res_corosync fails, you get the same
behavior as today and the fatal error tells you something is wrong with the
install.

ASTERISK-24998

Change-Id: Iaf94a9431a4922ec4ec994003f02135acfdd3889

res/res_corosync.c

index 6e73727..0b3a61f 100644 (file)
@@ -883,6 +883,12 @@ static int load_module(void)
                goto failed;
        }
 
+       if (load_config(0)) {
+               /* simply not configured is not a fatal error */
+               res = AST_MODULE_LOAD_DECLINE;
+               goto failed;
+       }
+
        if ((cs_err = corosync_cfg_initialize(&cfg_handle, &cfg_callbacks)) != CS_OK) {
                ast_log(LOG_ERROR, "Failed to initialize cfg: (%d)\n", (int) cs_err);
                goto failed;
@@ -913,12 +919,6 @@ static int load_module(void)
                goto failed;
        }
 
-       if (load_config(0)) {
-               /* simply not configured is not a fatal error */
-               res = AST_MODULE_LOAD_DECLINE;
-               goto failed;
-       }
-
        ast_cli_register_multiple(corosync_cli, ARRAY_LEN(corosync_cli));
 
        return AST_MODULE_LOAD_SUCCESS;