RFR: 8289919: [test] LoadLibraryUnloadTest.java failed with "Failed to unload native library" [v2]
Roger Riggs
rriggs at openjdk.org
Thu Jul 14 15:07:07 UTC 2022
On Thu, 14 Jul 2022 12:54:43 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
>> Roger Riggs has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Cleanup waiting for library unload
>
> test/jdk/java/lang/ClassLoader/loadLibraryUnload/libloadLibraryUnload.c line 48:
>
>> 46: if (ref == NULL) {
>> 47: // Only create a single GlobalRef
>> 48: ref = (*env)->NewGlobalRef(env, obj);
>
> Hello Roger, do we not use any synchronization here because even if both winning threads end up concurrently here, the `Object` instance they will be setting as a global ref will be the same one? Ofcourse, there will then be two calls to `NewGlobalRef` for the same instance. I am unaware what the semantics of that call will be in such cases and if it is of any concern.
Its a racy bug, each NewGlobalRef will have a reference to the object and only the global ref in the last call to `setRef` will be cleared.
The easiest fix is to synchronize on `Class1.class` in Class1.loadLibrary().
-------------
PR: https://git.openjdk.org/jdk/pull/9474
More information about the core-libs-dev
mailing list