On Wed, 13 Jul 2022 14:06:00 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. > > Roger Riggs has updated the pull request incrementally with one additional > commit since the last revision: > > Cleanup waiting for library unload Looks good. The solution is a good way to fix this race. Thanks for fixing this. test/jdk/java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnload.java line 168: > 166: for (int i = 0; i < LOADER_COUNT; i++) { > 167: System.gc(); > 168: var res = refQueue.remove(); This should block until one becomes available or `InterruptedException` gets thrown. So `res` would never be null? ------------- Marked as reviewed by mchung (Reviewer). PR: https://git.openjdk.org/jdk/pull/9474