while (!dlclose(lib));
}
-static struct ast_module *load_dynamic_module(const char *resource_in, unsigned int global_symbols_only)
+static enum ast_module_load_result load_resource(const char *resource_name, unsigned int global_symbols_only, struct ast_heap *resource_heap, int required);
+
+static struct ast_module *load_dynamic_module(const char *resource_in, unsigned int global_symbols_only, struct ast_heap *resource_heap)
{
char fn[PATH_MAX] = "";
void *lib = NULL;
/* Force any required dependencies to load */
char *each, *required_resource = ast_strdupa(mod->info->nonoptreq);
while ((each = strsep(&required_resource, ","))) {
+ struct ast_module *dependency;
each = ast_strip(each);
-
+ dependency = find_resource(each, 0);
/* Is it already loaded? */
- if (!find_resource(each, 0)) {
- load_dynamic_module(each, global_symbols_only);
+ if (!dependency) {
+ load_resource(each, global_symbols_only, resource_heap, 1);
}
}
}
char tmp[256];
enum ast_module_load_result res;
+ if (mod->flags.running) {
+ return AST_MODULE_LOAD_SUCCESS;
+ }
+
if (!mod->info->load) {
return AST_MODULE_LOAD_FAILURE;
}
return AST_MODULE_LOAD_SKIP;
} else {
#ifdef LOADABLE_MODULES
- if (!(mod = load_dynamic_module(resource_name, global_symbols_only))) {
+ if (!(mod = load_dynamic_module(resource_name, global_symbols_only, resource_heap))) {
/* don't generate a warning message during load_modules() */
if (!global_symbols_only) {
ast_log(LOG_WARNING, "Module '%s' could not be loaded.\n", resource_name);