When optional_api is non-optional, force dependent modules to be loaded.

(closes issue #17707)
 Reported by: ira
 Patches: 
       20100819__issue17707__asterisk1.8.diff.txt uploaded by tilghman (license 14)
 Tested by: tilghman
 
Review: https://reviewboard.asterisk.org/r/876/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@284610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2010-09-02 05:20:59 +00:00
parent 6c61e312c6
commit 7e3f95e00a
18 changed files with 65 additions and 12 deletions

View File

@@ -414,6 +414,26 @@ static struct ast_module *load_dynamic_module(const char *resource_in, unsigned
return NULL;
}
/* This section is a workaround for a gcc 4.1 bug that has already been
* fixed in later versions. Unfortunately, some distributions, such as
* RHEL/CentOS 5, distribute gcc 4.1, so we're stuck with having to deal
* with this issue. This basically ensures that optional_api modules are
* loaded before any module which requires their functionality. */
#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
if (!ast_strlen_zero(mod->info->nonoptreq)) {
/* Force any required dependencies to load */
char *each, *required_resource = ast_strdupa(mod->info->nonoptreq);
while ((each = strsep(&required_resource, ","))) {
each = ast_strip(each);
/* Is it already loaded? */
if (!find_resource(each, 0)) {
load_dynamic_module(each, global_symbols_only);
}
}
}
#endif
while (!dlclose(lib));
resource_being_loaded = NULL;