From 054317fb13d8c871759c07c4edd330bbb84aa4d5 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Tue, 5 Jul 2005 22:11:43 +0000 Subject: add support for 'early loading' modules, so that nearly all configuration files can be read from Realtime storage add warning for when file mapping is found but the engine is not available add warning for trying to map 'logger.conf', since it cannot be reliably mapped git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- loader.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'loader.c') diff --git a/loader.c b/loader.c index 012491cc1..ec8585190 100755 --- a/loader.c +++ b/loader.c @@ -450,35 +450,53 @@ static const char *loadorder[] = NULL, }; -int load_modules() +int load_modules(const int preload_only) { struct ast_config *cfg; struct ast_variable *v; char tmp[80]; - if (option_verbose) - ast_verbose( "Asterisk Dynamic Loader Starting:\n"); + + if (option_verbose) { + if (preload_only) + ast_verbose("Asterisk Dynamic Loader loading preload modules:\n"); + else + ast_verbose("Asterisk Dynamic Loader Starting:\n"); + } + cfg = ast_config_load(AST_MODULE_CONFIG); if (cfg) { + int doload; + /* Load explicitly defined modules */ - v = ast_variable_browse(cfg, "modules"); - while(v) { - if (!strcasecmp(v->name, "load")) { + for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) { + doload = 0; + + if (preload_only) + doload = !strcasecmp(v->name, "preload"); + else + doload = !strcasecmp(v->name, "load"); + + if (doload) { if (option_debug && !option_verbose) ast_log(LOG_DEBUG, "Loading module %s\n", v->value); if (option_verbose) { - ast_verbose( VERBOSE_PREFIX_1 "[%s]", term_color(tmp, v->value, COLOR_BRWHITE, 0, sizeof(tmp))); + ast_verbose(VERBOSE_PREFIX_1 "[%s]", term_color(tmp, v->value, COLOR_BRWHITE, 0, sizeof(tmp))); fflush(stdout); } if (__load_resource(v->value, cfg)) { ast_log(LOG_WARNING, "Loading module %s failed!\n", v->value); - if (cfg) - ast_config_destroy(cfg); + ast_config_destroy(cfg); return -1; } } - v=v->next; } } + + if (preload_only) { + ast_config_destroy(cfg); + return 0; + } + if (!cfg || ast_true(ast_variable_retrieve(cfg, "modules", "autoload"))) { /* Load all modules */ DIR *mods; -- cgit v1.2.3