From 644eb1c3157ba3a18e4aec0f7bcb55081a9a3320 Mon Sep 17 00:00:00 2001 From: Sven Gothel <sgothel@jausoft.com> Date: Thu, 1 Dec 2011 16:19:59 +0100 Subject: DynamicLibraryBundle/NativeLibrary: Add destroy() to bundle, causing unloading of native library. --- .../com/jogamp/common/os/DynamicLibraryBundle.java | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/java/com/jogamp/common/os/DynamicLibraryBundle.java') diff --git a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java index b7e0739..c8bf30a 100755 --- a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java +++ b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java @@ -71,6 +71,7 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { private HashSet<String> toolGetProcAddressFuncNameSet; private List<String> toolGetProcAddressFuncNameList; + /** Instantiates and loads all {@link NativeLibrary}s incl. JNI libraries. */ public DynamicLibraryBundle(DynamicLibraryBundleInfo info) { if(null==info) { throw new RuntimeException("Null DynamicLibraryBundleInfo"); @@ -102,6 +103,26 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { System.err.println(" All Complete: "+isLibComplete()); } } + + /** Unload all {@link NativeLibrary}s, and remove all references. */ + public void destroy() { + if(DEBUG) { + System.err.println(Thread.currentThread().getName()+" - DynamicLibraryBundle.destroy() START: "+info.getClass().getName()); + } + toolGetProcAddressFuncNameSet = null; + toolGetProcAddressHandle = 0; + for(int i = 0; i<nativeLibraries.size(); i++) { + nativeLibraries.get(i).close(); + } + nativeLibraries.clear(); + nativeLibraries = null; + toolLibNames = null; + glueLibNames = null; + if(DEBUG) { + System.err.println(Thread.currentThread().getName()+" - DynamicLibraryBundle.destroy() END: "+info.getClass().getName()); + } + info = null; + } public final boolean isLibComplete() { return isToolLibComplete() && isGlueLibComplete() ; @@ -267,7 +288,7 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { } } } - + private long dynamicLookupFunctionOnLibs(String funcName) { if(!isToolLibLoaded() || null==funcName) { if(DEBUG_LOOKUP && !isToolLibLoaded()) { -- cgit v1.2.3