On Wed, 30 Mar 2022 13:21:41 GMT, Jaikiran Pai <j...@openjdk.org> wrote:
>> A small improvement to `RawNativeLibraries`. `RawNativeLibraries::load` >> returns the same `NativeLibrary` instance of a given path if it's called >> multiple times. This means that multiple clients have to coordinate that the >> last one using the loaded library is the one to close the library by calling >> `RawNativeLibraries::unload`; otherwise, an exception may be thrown. >> >> This patch changes `RawNativeLibraries::load` to delegate to the underlying >> platform-specific library loading mechanism e.g. dlopen/dlclose that keeps >> the reference count. So each call to `RawNativeLibraries::load` and >> `unload` is simply a call to dlopen and dlclose respectively. Each client >> of calling `RawNativeLibraries::load` is responsible for calling >> `RawNativeLibraries::unload`. This will be consistent with the current >> behavior when you call `load` and `unload` with a different >> `RawNativeLibraries` instance. > > src/java.base/share/classes/jdk/internal/loader/RawNativeLibraries.java line > 49: > >> 47: public final class RawNativeLibraries { >> 48: final Set<RawNativeLibraryImpl> libraries = >> ConcurrentHashMap.newKeySet(); >> 49: final Class<?> caller; > > Hello Mandy, > Apart from the `caller` being used for checks while constructing a > `RawNativeLibraries` in `RawNativeLibraries.newInstance(MethodHandles.Lookup > trustedCaller)`, I don't see this instance member being used anywhere. Do you > think we need to store this as an instance member? I keep it as a record and for debugging use in case. ------------- PR: https://git.openjdk.java.net/jdk/pull/8022