RFR JDK-8148624: Test failure of ConstructInflaterOutput.java

Xueming Shen xueming.shen at oracle.com
Sat Feb 13 04:58:37 UTC 2016


Hi,

Please help review the change for JDK-8148624

Issue: https://bugs.openjdk.java.net/browse/JDK-8148624
Webrev: http://cr.openjdk.java.net/~sherman/8148624/webrev/

The tests are intended to test/verify that the Deflater/Inflater.end() 
method will
not be invoked when they are passed in as the parameter to the 
constructor of
the DefaultInputStream and InflateOutputStream class, when the corresponding
close&/finish() method are invoked.  The stacktrace suggests that the end()
method is not actually being called (failure) by the close/finish(), but 
by the
finalize(). It appears the deflater/inflater is somehow being finalized 
by gc
between A and B showed below

     public static void main(String[] args) throws Throwable {
         try {realMain(args);} catch (Throwable t) {unexpected(t);}
[A]-->
         System.out.println("\nPassed = " + passed + " failed = " + failed);
[B]-->
         if (failed > 0) throw new AssertionError("Some tests failed");}


the problem can be easily reproduced by inserting a System.gc() in between.

The easy fix is just move the inflater/deflater out of realMain() to be 
the static variable
to prevent them from being gc-ed.

Thanks,
Sherman



More information about the core-libs-dev mailing list