On Tue, 12 Jul 2022 20:00:22 GMT, Roger Riggs <rri...@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

Reply via email to