[Asterisk-cvs] asterisk config.c,1.43,1.44 loader.c,1.34,1.35

markster at lists.digium.com markster at lists.digium.com
Sun Jan 16 16:56:06 CST 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv23081

Modified Files:
	config.c loader.c 
Log Message:
Optimize module loading (bug #3356)


Index: config.c
===================================================================
RCS file: /usr/cvsroot/asterisk/config.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- config.c	16 Jan 2005 06:01:50 -0000	1.43
+++ config.c	16 Jan 2005 22:59:30 -0000	1.44
@@ -119,7 +119,7 @@
 	return 0;
 }
 
-struct ast_variable *ast_variable_browse(struct ast_config *config, char *category)
+struct ast_variable *ast_variable_browse(const struct ast_config *config, const char *category)
 {
 	struct ast_category *cat;
 	cat = config->root;
@@ -137,7 +137,7 @@
 	return NULL;
 }
 
-char *ast_variable_retrieve(struct ast_config *config, char *category, char *value)
+char *ast_variable_retrieve(const struct ast_config *config, const char *category, const char *value)
 {
 	struct ast_variable *v;
 	if (category) {

Index: loader.c
===================================================================
RCS file: /usr/cvsroot/asterisk/loader.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- loader.c	10 Jan 2005 22:16:42 -0000	1.34
+++ loader.c	16 Jan 2005 22:59:30 -0000	1.35
@@ -105,7 +105,7 @@
 static struct module *module_list=NULL;
 static int modlistver = 0;
 
-int ast_unload_resource(char *resource_name, int force)
+int ast_unload_resource(const char *resource_name, int force)
 {
 	struct module *m, *ml = NULL;
 	int res = -1;
@@ -244,7 +244,7 @@
 	return reloaded;
 }
 
-int ast_load_resource(char *resource_name)
+static int __load_resource(const char *resource_name, const struct ast_config *cfg)
 {
 	static char fn[256];
 	int errors=0;
@@ -255,23 +255,16 @@
 	char *val;
 #endif
 	char *key;
-	int o;
-	struct ast_config *cfg;
 	char tmp[80];
-	/* Keep the module file parsing silent */
-	o = option_verbose;
+
 	if (strncasecmp(resource_name, "res_", 4)) {
-		option_verbose = 0;
-		cfg = ast_load(AST_MODULE_CONFIG);
-		option_verbose = o;
-		if (cfg) {
 #ifdef RTLD_GLOBAL
+		if (cfg) {
 			if ((val = ast_variable_retrieve(cfg, "global", resource_name))
 					&& ast_true(val))
 				flags |= RTLD_GLOBAL;
-#endif
-			ast_destroy(cfg);
 		}
+#endif
 	} else {
 		/* Resource modules are always loaded global and lazy */
 #ifdef RTLD_GLOBAL
@@ -399,6 +392,23 @@
 	}
 	ast_update_use_count();
 	return 0;
+}
+
+int ast_load_resource(const char *resource_name)
+{
+	int o;
+	struct ast_config *cfg = NULL;
+	int res;
+
+	/* Keep the module file parsing silent */
+	o = option_verbose;
+	option_verbose = 0;
+	cfg = ast_load(AST_MODULE_CONFIG);
+	option_verbose = o;
+	res = __load_resource(resource_name, cfg);
+	if (cfg)
+		ast_destroy(cfg);
+	return res;
 }	
 
 static int ast_resource_exists(char *resource)
@@ -446,7 +456,7 @@
 					ast_verbose( VERBOSE_PREFIX_1 "[%s]", term_color(tmp, v->value, COLOR_BRWHITE, 0, sizeof(tmp)));
 					fflush(stdout);
 				}
-				if (ast_load_resource(v->value)) {
+				if (__load_resource(v->value, cfg)) {
 					ast_log(LOG_WARNING, "Loading module %s failed!\n", v->value);
 					if (cfg)
 						ast_destroy(cfg);
@@ -496,7 +506,7 @@
 							ast_verbose( VERBOSE_PREFIX_1 "[%s]", term_color(tmp, d->d_name, COLOR_BRWHITE, 0, sizeof(tmp)));
 							fflush(stdout);
 						}
-						if (ast_load_resource(d->d_name)) {
+						if (__load_resource(d->d_name, cfg)) {
 							ast_log(LOG_WARNING, "Loading module %s failed!\n", d->d_name);
 							if (cfg)
 								ast_destroy(cfg);




More information about the svn-commits mailing list