]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
loader: Fix result of module reload error.
authorCorey Farrell <git@cfware.com>
Tue, 2 Oct 2018 06:28:20 +0000 (02:28 -0400)
committerCorey Farrell <git@cfware.com>
Tue, 2 Oct 2018 18:11:14 +0000 (14:11 -0400)
When a module reload fails we never set AST_MODULE_RELOAD_ERROR.  This
caused reload failures to incorrectly report 'No module found'.

Change-Id: I5f3953e0f7d135e53ec797f24c97ee3f73f232e7

main/loader.c

index c495d761548c69cfad2e88b70fed07a569a0d90c..0324b139488ab9cd92c85c2beb93ecd0bda0850f 100644 (file)
@@ -991,14 +991,14 @@ enum ast_module_reload_result ast_module_reload(const char *name)
 
        if (ast_opt_lock_confdir) {
                int try;
-               int res;
-               for (try = 1, res = AST_LOCK_TIMEOUT; try < 6 && (res == AST_LOCK_TIMEOUT); try++) {
-                       res = ast_lock_path(ast_config_AST_CONFIG_DIR);
-                       if (res == AST_LOCK_TIMEOUT) {
+               int lockres;
+               for (try = 1, lockres = AST_LOCK_TIMEOUT; try < 6 && (lockres == AST_LOCK_TIMEOUT); try++) {
+                       lockres = ast_lock_path(ast_config_AST_CONFIG_DIR);
+                       if (lockres == AST_LOCK_TIMEOUT) {
                                ast_log(LOG_WARNING, "Failed to grab lock on %s, try %d\n", ast_config_AST_CONFIG_DIR, try);
                        }
                }
-               if (res != AST_LOCK_SUCCESS) {
+               if (lockres != AST_LOCK_SUCCESS) {
                        ast_log(AST_LOG_WARNING, "Cannot grab lock on %s\n", ast_config_AST_CONFIG_DIR);
                        res = AST_MODULE_RELOAD_ERROR;
                        goto module_reload_done;
@@ -1010,6 +1010,8 @@ enum ast_module_reload_result ast_module_reload(const char *name)
                if (!name || !strcasecmp(name, reload_classes[i].name)) {
                        if (reload_classes[i].reload_fn() == AST_MODULE_LOAD_SUCCESS) {
                                res = AST_MODULE_RELOAD_SUCCESS;
+                       } else if (res == AST_MODULE_RELOAD_NOT_FOUND) {
+                               res = AST_MODULE_RELOAD_ERROR;
                        }
                }
        }
@@ -1051,6 +1053,8 @@ enum ast_module_reload_result ast_module_reload(const char *name)
                ast_verb(3, "Reloading module '%s' (%s)\n", cur->resource, info->description);
                if (info->reload() == AST_MODULE_LOAD_SUCCESS) {
                        res = AST_MODULE_RELOAD_SUCCESS;
+               } else if (res == AST_MODULE_RELOAD_NOT_FOUND) {
+                       res = AST_MODULE_RELOAD_ERROR;
                }
                if (name) {
                        break;