Request for Review: 7094995: test/java/util/zip/ZipFile/ClearStaleZipFileInputStreams.java causes continuous GC in agentvm mode
Joe Darcy
joe.darcy at oracle.com
Wed Nov 23 16:33:15 UTC 2011
Hello,
On 11/22/2011 9:57 PM, David Holmes wrote:
> Hi Neil,
>
> On 22/11/2011 9:51 PM, Neil Richards wrote:
>> I've created a webrev [1] to address the problem reported in bug
>> 7094995, where the ClearStaleZipFileInputStreams testcase leaves a
>> lingering GC inducing thread running after the test ends (when run in
>> agentvm mode), as spotted by Alan and mentioned in another conversation
>> [2].
>>
>> It modifies the testcase so the main thread tells the GcInducingThread
>> to shut down, and waits for it to do so (using Thread.join()) before
>> exiting.
>
> As per the discussion from Alan and Chris, I would code it so that
> interrupt terminates the thread:
>
> catch (InterruptedException ie) {
> return;
> }
>
>> I've also converted the testcase's use of ZipFile, ZipOutputStream&
>> FileOutputStream to use ARM (for greater clarity).
>
> I think proper use of ARM requires that this:
>
> 66 try (ZipOutputStream zos =
> 67 new ZipOutputStream(new
> FileOutputStream(tempZipFile))) {
>
> be written as:
>
> try (FileOutputStream fos = new FileOutputStream(tempZipFile);
> ZipOutputStream zos = new ZipOutputStream(fos)) {
>
The more conservative approach is to define one resource variable per
logical resource even if the one resource is "wrapped" by the second
one, as in the second example. This does close the small window of
vulnerability between when the first constructor call ends and the
second one completes. However, if that pattern is used, it is important
for the close method of the inner resource to be idempotent, as required
by the java.io.Closeable type but *not* required by java.lang.AutoCloseable.
-Joe
More information about the core-libs-dev
mailing list