From: David Vossel Date: Mon, 22 Jun 2009 15:33:35 +0000 (+0000) Subject: attempting to load running modules X-Git-Tag: 11.0.0-beta1~4635 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=87c865891238c85a18918ee11272396ea5a6182c;p=thirdparty%2Fasterisk.git attempting to load running modules Modules placed in the priority heap for loading were not properly removed from the linked list. This resulted in some modules attempting to load twice. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@202410 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/include/asterisk/module.h b/include/asterisk/module.h index e7aec449f5..48911c8c2a 100644 --- a/include/asterisk/module.h +++ b/include/asterisk/module.h @@ -58,10 +58,11 @@ enum ast_module_unload_mode { }; enum ast_module_load_result { - AST_MODULE_LOAD_SUCCESS = 0, /*!< Module loaded and configured */ - AST_MODULE_LOAD_DECLINE = 1, /*!< Module is not configured */ - AST_MODULE_LOAD_SKIP = 2, /*!< Module was skipped for some reason */ - AST_MODULE_LOAD_FAILURE = -1, /*!< Module could not be loaded properly */ + AST_MODULE_LOAD_SUCCESS = 0, /*!< Module loaded and configured */ + AST_MODULE_LOAD_DECLINE = 1, /*!< Module is not configured */ + AST_MODULE_LOAD_SKIP = 2, /*!< Module was skipped for some reason */ + AST_MODULE_LOAD_PRIORITY = 3, /*!< Module is not loaded yet, but is added to prioity heap */ + AST_MODULE_LOAD_FAILURE = -1, /*!< Module could not be loaded properly */ }; /*! diff --git a/main/loader.c b/main/loader.c index 45b66612e2..a8e9864093 100644 --- a/main/loader.c +++ b/main/loader.c @@ -742,9 +742,8 @@ static enum ast_module_load_result start_resource(struct ast_module *mod) mod->flags.declined = 1; break; case AST_MODULE_LOAD_FAILURE: - break; - case AST_MODULE_LOAD_SKIP: - /* modules should never return this value */ + case AST_MODULE_LOAD_SKIP: /* modules should never return this value */ + case AST_MODULE_LOAD_PRIORITY: break; } @@ -806,7 +805,7 @@ static enum ast_module_load_result load_resource(const char *resource_name, unsi if (resource_heap) { ast_heap_push(resource_heap, mod); - res = AST_MODULE_LOAD_SKIP; + res = AST_MODULE_LOAD_PRIORITY; } else { res = start_resource(mod); } @@ -892,6 +891,9 @@ static int load_resource_list(struct load_order *load_order, unsigned int global goto done; case AST_MODULE_LOAD_SKIP: break; + case AST_MODULE_LOAD_PRIORITY: + AST_LIST_REMOVE_CURRENT(entry); + break; } } AST_LIST_TRAVERSE_SAFE_END; @@ -907,6 +909,7 @@ static int load_resource_list(struct load_order *load_order, unsigned int global res = -1; goto done; case AST_MODULE_LOAD_SKIP: + case AST_MODULE_LOAD_PRIORITY: break; } }