[
https://issues.apache.org/jira/browse/COMPRESS-297?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14272680#comment-14272680
]
Dawid Weiss commented on COMPRESS-297:
--------------------------------------
That close field should be declared volatile since finalize is invoked from a
system thread and the write may not propagate properly.
> Cleaning up unclosed ZipFile for archive
> ----------------------------------------
>
> Key: COMPRESS-297
> URL: https://issues.apache.org/jira/browse/COMPRESS-297
> Project: Commons Compress
> Issue Type: Bug
> Components: Archivers
> Affects Versions: 1.8.1
> Environment: Windows 7 64-bit
> Reporter: Andrew Liu
> Priority: Minor
> Fix For: 1.10
>
>
> If you try to create a ZipFile from a non-existent file, then it throws a
> FileNotFoundException, which is fine. The problem is that the constructor
> appears to leave behind objects that the caller cannot close. So, later on
> when the garbage collector runs, a message is printed to stdout that says
> "Cleaning up unclosed ZipFile for archive". Here is a failing unit test:
> {code:title=TCommonCompressZipFileConstructor.java|borderStyle=solid}
> import org.apache.commons.compress.archivers.zip.ZipFile;
> import org.junit.Test;
> import java.io.File;
> import java.io.IOException;
> public final class TCommonCompressZipFileConstructor {
> @Test
> public void constructorThatThrowsExceptionLeavesBehindObjects() {
> final File file = new File("");
> try {
> new ZipFile(file);
> } catch (final IOException e) {
> e.printStackTrace();
> System.gc();
> }
> }
> }
> {code}
> And here is the test output:
> {color:red}
> java.io.FileNotFoundException:
> at java.io.RandomAccessFile.open(Native Method)
> at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241)
> at
> org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:213)
> at
> org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:192)
> at
> org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:153)
> at
> com.mathworks.mlwidgets.explorer.unittest.TCommonCompressZipFileConstructor.constructorThatThrowsExceptionLeavesBehindObjects(TCommonCompressZipFileConstructor.java:14)
> ...
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
> *Cleaning up unclosed ZipFile for archive L:\IntelliJ projects\foo*
> {color}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)