mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-09 06:28:14 +00:00
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:
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user