diff --git a/include/asterisk/module.h b/include/asterisk/module.h index e7aec449f5d0e62e1c7f8c0117d58da68563a517..48911c8c2a08aa55148cb5f5b7685bedfdd38502 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 45b66612e25102b8824f95bdb8f078ad233f126a..a8e98640930f099371a051fe3580c3fb8840d566 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; } }