diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 6392825cf8..66e0522c2c 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -784,6 +784,9 @@ Release 2.1.0-beta - 2013-07-02 HADOOP-9678. TestRPC#testStopsAllThreads intermittently fails on Windows. (Ivan Mitic via cnauroth) + HADOOP-9681. FileUtil.unTarUsingJava() should close the InputStream upon + finishing. (Chuan Liu via cnauroth) + HADOOP-9665. Fixed BlockDecompressorStream#decompress to return -1 rather than throw EOF at end of file. (Zhijie Shen via acmurthy) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java index cb216e96ef..afa7fa785e 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java @@ -662,18 +662,23 @@ private static void unTarUsingTar(File inFile, File untarDir, private static void unTarUsingJava(File inFile, File untarDir, boolean gzipped) throws IOException { InputStream inputStream = null; - if (gzipped) { - inputStream = new BufferedInputStream(new GZIPInputStream( - new FileInputStream(inFile))); - } else { - inputStream = new BufferedInputStream(new FileInputStream(inFile)); - } + TarArchiveInputStream tis = null; + try { + if (gzipped) { + inputStream = new BufferedInputStream(new GZIPInputStream( + new FileInputStream(inFile))); + } else { + inputStream = new BufferedInputStream(new FileInputStream(inFile)); + } - TarArchiveInputStream tis = new TarArchiveInputStream(inputStream); + tis = new TarArchiveInputStream(inputStream); - for (TarArchiveEntry entry = tis.getNextTarEntry(); entry != null;) { - unpackEntries(tis, entry, untarDir); - entry = tis.getNextTarEntry(); + for (TarArchiveEntry entry = tis.getNextTarEntry(); entry != null;) { + unpackEntries(tis, entry, untarDir); + entry = tis.getNextTarEntry(); + } + } finally { + IOUtils.cleanup(LOG, tis, inputStream); } }