RFR: 8283060: RawNativeLibraries should allow multiple clients to load/unload the same library
Mandy Chung
mchung at openjdk.java.net
Wed Mar 30 17:18:46 UTC 2022
On Wed, 30 Mar 2022 13:21:41 GMT, Jaikiran Pai <jpai at 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
More information about the core-libs-dev
mailing list