Hi,

Please review my test-only fix for 8220088[1]. Along with fixing the issue, I've also converted this .sh test to .java.

Webrev is here:
http://cr.openjdk.java.net/~bchristi/8220088/webrev.00/

The test does the following:
1. sets up a classloader and loads class "C" into a WeakReference
2. runs a few GCs and ensures that the C class is still live
3. clears the reference to the classloader and runs a few more GCs
4. ensures that the C class has been collected (now that its classloader can also be collected)

When run with -Xcomp, the test fails with:

Exception in thread "main" java.lang.AssertionError
at Main.doTest(Main.java:56)
at Main.main(Main.java:41)

This comes from the code for step 2:

  System.gc();
  System.gc();
  if (c.get() == null) throw new AssertionError();

The C class is being collected before expected.

From my testing, I believe that when the test is pre-compiled with -Xcomp, the VM sees that 'loader' gets null'ed out, and doesn't keep it alive.

My change to fix this issue is adding this check:

+ if (loader != null) { // Under -Xcomp, ensure loader is still alive
      loader = null;
+ }

There are probably other ways to accomplish this, though this worked well for local as well as automated testing.

The rest of the changes are for the .sh -> .java conversion.

Thanks,
-Brent

1. https://bugs.openjdk.java.net/browse/JDK-8220088

Reply via email to