summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/kwsys/DynamicLoader.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/Source/kwsys/DynamicLoader.cxx b/Source/kwsys/DynamicLoader.cxx
index 887f5ab..7755296 100644
--- a/Source/kwsys/DynamicLoader.cxx
+++ b/Source/kwsys/DynamicLoader.cxx
@@ -167,7 +167,13 @@ LibHandle DynamicLoader::OpenLibrary(const char* libname )
//----------------------------------------------------------------------------
int DynamicLoader::CloseLibrary( LibHandle lib)
{
- bool success = NSUnLinkModule(lib, NSUNLINKMODULE_OPTION_NONE);
+ // Initially this function was written using NSUNLINKMODULE_OPTION_NONE, but when
+ // the code is compiled with coverage on, one cannot close the library properly
+ // so instead of not unloading the library. We use a special option:
+ // NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED
+ // With this option the memory for the module is not deallocated
+ // allowing pointers into the module to still be valid.
+ bool success = NSUnLinkModule(lib, NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED);
return success;
}