From 26fa2291384a21c9515440150a0ab9af165cccbb Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Mon, 21 Aug 2006 22:23:26 +0000
Subject: [PATCH] restore 'preload' functionality in loader

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 include/asterisk.h |  2 +-
 main/asterisk.c    |  7 ++++++-
 main/loader.c      | 20 ++++++++++++++------
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/include/asterisk.h b/include/asterisk.h
index 7858230e66..1ed3d322d8 100644
--- a/include/asterisk.h
+++ b/include/asterisk.h
@@ -51,7 +51,7 @@ extern char ast_config_AST_CTL[PATH_MAX];
 extern char ast_config_AST_SYSTEM_NAME[20];
 
 int ast_set_priority(int);			/*!< Provided by asterisk.c */
-int load_modules(void);				/*!< Provided by loader.c */
+int load_modules(unsigned int);			/*!< Provided by loader.c */
 int load_pbx(void);				/*!< Provided by pbx.c */
 int init_logger(void);				/*!< Provided by logger.c */
 void close_logger(void);			/*!< Provided by logger.c */
diff --git a/main/asterisk.c b/main/asterisk.c
index a514627529..3898ccb4a2 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -2615,7 +2615,7 @@ int main(int argc, char *argv[])
 		printf(term_quit());
 		exit(1);
 	}
-	if (load_modules()) {
+	if (load_modules(1)) {
 		printf(term_quit());
 		exit(1);
 	}
@@ -2678,6 +2678,11 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
+	if (load_modules(0)) {
+		printf(term_quit());
+		exit(1);
+	}
+
 	dnsmgr_start_refresh();
 
 	/* We might have the option of showing a console, but for now just
diff --git a/main/loader.c b/main/loader.c
index 518b45247b..79aca11b56 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -667,7 +667,7 @@ static struct load_order_entry *add_to_load_order(const char *resource, struct l
 	return order;
 }
 
-int load_modules(void)
+int load_modules(unsigned int preload_only)
 {
 	struct ast_config *cfg;
 	struct ast_module *mod;
@@ -699,14 +699,22 @@ int load_modules(void)
 
 	AST_LIST_HEAD_INIT_NOLOCK(&load_order);
 
-	/* first, find all the modules we have been explicitly requested to load */
-	for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) {
-		if (!strcasecmp(v->name, "load"))
-			add_to_load_order(v->value, &load_order);
+	if (preload_only) {
+		/* first, find all the modules we have been explicitly requested to load */
+		for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) {
+			if (!strcasecmp(v->name, "preload"))
+				add_to_load_order(v->value, &load_order);
+		}
+	} else {
+		/* first, find all the modules we have been explicitly requested to load */
+		for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) {
+			if (!strcasecmp(v->name, "load"))
+				add_to_load_order(v->value, &load_order);
+		}
 	}
 
 	/* check if 'autoload' is on */
-	if (ast_true(ast_variable_retrieve(cfg, "modules", "autoload"))) {
+	if (!preload_only && ast_true(ast_variable_retrieve(cfg, "modules", "autoload"))) {
 		/* if so, first add all the embedded modules to the load order */
 		AST_LIST_TRAVERSE(&module_list, mod, entry) {
 			order = add_to_load_order(mod->resource, &load_order);
-- 
GitLab