From: Kevin P. Fleming Date: Sat, 26 Aug 2006 19:45:16 +0000 (+0000) Subject: ensure that unload_dynamic_module won't continue dereferencing a module pointer after... X-Git-Tag: 1.4.0-beta1~275 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a757ca294799f7e014b3dd7083943ac7e1630614;p=thirdparty%2Fasterisk.git ensure that unload_dynamic_module won't continue dereferencing a module pointer after the module has been unloaded from memory git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41196 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/loader.c b/main/loader.c index 4ece4ae6b6..30f5aa6600 100644 --- a/main/loader.c +++ b/main/loader.c @@ -323,9 +323,14 @@ static struct ast_module *find_resource(const char *resource, int do_lock) #if LOADABLE_MODULES static void unload_dynamic_module(struct ast_module *mod) { - if (mod->lib) - while (!dlclose(mod->lib)); - /* WARNING: the structure pointed to by mod is now gone! */ + void *lib = mod->lib; + + /* WARNING: the structure pointed to by mod is going to + disappear when this operation succeeds, so we can't + dereference it */ + + if (lib) + while (!dlclose(lib)); } static struct ast_module *load_dynamic_module(const char *resource_in, unsigned int global_symbols_only)