RFR: 8289919: [test] LoadLibraryUnloadTest.java failed with "Failed to unload native library"
Roger Riggs
rriggs at openjdk.org
Wed Jul 13 13:30:03 UTC 2022
On Tue, 12 Jul 2022 20:00:22 GMT, Roger Riggs <rriggs at openjdk.org> wrote:
> The test `java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnloadTest.java`
> Fails intermittently when expected output from a subprocess is not found.
>
> I suspect a race between the Cleaner that is going to call JNI_OnUnload (in NativeLibraries.java:377) when the ClassLoader is no longer referenced and the test code that exits as soon as it detects that the p.Class1 is no longer referenced.
>
> The proposed fix is to create a canary object referenced by the native library and released when the library is unloaded.
> The Java side of the test provides the canary object and uses a WeakReference to wait for it to be released.
> When released the child process exits and the driver test will find all of the output it expects.
Yes, waiting for only the final Class1 loaded from the class loaders is suspect.
There is no deterministic order to the clearing/queuing of the WeakReferences/PhantomReferences to the classes or the respective class loaders. The test is looking for the call to the library's "_OnUnload" function to be printed to the output.
That happens sometime after the (successful) class loader is reclaimed; waiting on that reclamation isn't sufficient.
I'll remove the waiting on the Class1.
-------------
PR: https://git.openjdk.org/jdk/pull/9474
More information about the core-libs-dev
mailing list