diff --git a/src/main/java/org/xerial/snappy/SnappyOutputStream.java b/src/main/java/org/xerial/snappy/SnappyOutputStream.java index c930a4b..1fe3cef 100755 --- a/src/main/java/org/xerial/snappy/SnappyOutputStream.java +++ b/src/main/java/org/xerial/snappy/SnappyOutputStream.java @@ -69,6 +69,7 @@ public class SnappyOutputStream extends OutputStream { protected final byte[] outputBuffer; private int inputCursor = 0; private int outputCursor = 0; + private boolean closed; public SnappyOutputStream(OutputStream out) { this(out, DEFAULT_BLOCK_SIZE); @@ -320,10 +321,14 @@ public class SnappyOutputStream extends OutputStream { */ @Override public void close() throws IOException { + if (closed) { + return; + } try { flush(); out.close(); } finally { + closed = true; inputBufferAllocator.release(inputBuffer); outputBufferAllocator.release(outputBuffer); } diff --git a/src/test/java/org/xerial/snappy/SnappyOutputStreamTest.java b/src/test/java/org/xerial/snappy/SnappyOutputStreamTest.java index b6f4009..e248d07 100755 --- a/src/test/java/org/xerial/snappy/SnappyOutputStreamTest.java +++ b/src/test/java/org/xerial/snappy/SnappyOutputStreamTest.java @@ -187,8 +187,10 @@ public class SnappyOutputStreamTest os3.close(); SnappyInputStream in2 = new SnappyInputStream(new ByteArrayInputStream(ba2.toByteArray())); assertEquals(2, in2.read()); + in2.close(); SnappyInputStream in3 = new SnappyInputStream(new ByteArrayInputStream(ba3.toByteArray())); assertEquals(3, in3.read()); + in3.close(); } @Test