diff --git a/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java b/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java index 521d5373..744e6f06 100644 --- a/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java +++ b/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java @@ -153,19 +153,17 @@ private void flushBuffer( ByteBuffer writeBuffer ) throws IOException @Override public void close() throws IOException { - flush(); - long position = channel.position(); - if ( position != channel.size() ) + if ( channel.isOpen() ) { - if ( !modified ) + flush(); + long position = channel.position(); + if ( position != channel.size() ) { - FileTime now = FileTime.from( Instant.now() ); - Files.setLastModifiedTime( path, now ); modified = true; + channel.truncate( position ); } - channel.truncate( position ); + channel.close(); } - channel.close(); } public boolean isModified() diff --git a/src/test/java/org/codehaus/plexus/util/io/CachingOutputStreamTest.java b/src/test/java/org/codehaus/plexus/util/io/CachingOutputStreamTest.java index 3c329ea9..e7888ad4 100644 --- a/src/test/java/org/codehaus/plexus/util/io/CachingOutputStreamTest.java +++ b/src/test/java/org/codehaus/plexus/util/io/CachingOutputStreamTest.java @@ -17,7 +17,6 @@ */ import java.io.IOException; -import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -39,7 +38,6 @@ public class CachingOutputStreamTest Path tempDir; Path checkLastModified; - FileTime lm; @Before public void setup() throws IOException @@ -48,19 +46,18 @@ public void setup() throws IOException Files.createDirectories( dir ); tempDir = Files.createTempDirectory( dir, "temp-" ); checkLastModified = tempDir.resolve( ".check" ); - Files.newOutputStream( checkLastModified ).close(); - lm = Files.getLastModifiedTime( checkLastModified ); } private void waitLastModified() throws IOException, InterruptedException { + Files.newOutputStream( checkLastModified ).close(); + FileTime lm = Files.getLastModifiedTime( checkLastModified ); while ( true ) { Files.newOutputStream( checkLastModified ).close(); FileTime nlm = Files.getLastModifiedTime( checkLastModified ); if ( !Objects.equals( nlm, lm ) ) { - lm = nlm; break; } Thread.sleep( 10 ); diff --git a/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java b/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java index f5b95903..a4ffec91 100644 --- a/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java +++ b/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java @@ -27,7 +27,6 @@ import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -38,7 +37,6 @@ public class CachingWriterTest Path tempDir; Path checkLastModified; - FileTime lm; @Before public void setup() throws IOException @@ -47,19 +45,18 @@ public void setup() throws IOException Files.createDirectories( dir ); tempDir = Files.createTempDirectory( dir, "temp-" ); checkLastModified = tempDir.resolve( ".check" ); - Files.newOutputStream( checkLastModified ).close(); - lm = Files.getLastModifiedTime( checkLastModified ); } private void waitLastModified() throws IOException, InterruptedException { + Files.newOutputStream( checkLastModified ).close(); + FileTime lm = Files.getLastModifiedTime( checkLastModified ); while ( true ) { Files.newOutputStream( checkLastModified ).close(); FileTime nlm = Files.getLastModifiedTime( checkLastModified ); if ( !Objects.equals( nlm, lm ) ) { - lm = nlm; break; } Thread.sleep( 10 );