diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CiphertextWriter.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CiphertextWriter.java index 7a01d1d8a..f4716673b 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CiphertextWriter.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CiphertextWriter.java @@ -1,5 +1,7 @@ package org.cryptomator.filesystem.crypto; +import java.io.InterruptedIOException; +import java.io.UncheckedIOException; import java.nio.ByteBuffer; import java.util.concurrent.Callable; @@ -25,7 +27,7 @@ class CiphertextWriter implements Callable { file.write(ciphertext); } } catch (InterruptedException e) { - Thread.currentThread().interrupt(); + throw new UncheckedIOException(new InterruptedIOException("Task interrupted while waiting for ciphertext")); } return null; } diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoWritableFile.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoWritableFile.java index 5d52ffd24..d40b7623c 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoWritableFile.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoWritableFile.java @@ -23,9 +23,13 @@ import org.cryptomator.crypto.engine.FileContentCryptor; import org.cryptomator.crypto.engine.FileContentEncryptor; import org.cryptomator.filesystem.WritableFile; import org.cryptomator.io.ByteBuffers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; class CryptoWritableFile implements WritableFile { + private static final Logger LOG = LoggerFactory.getLogger(CryptoWritableFile.class); + final WritableFile file; private final ExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); private final FileContentEncryptor encryptor; @@ -82,6 +86,7 @@ class CryptoWritableFile implements WritableFile { @Override public void delete() { + writeTask.cancel(true); file.delete(); } @@ -107,9 +112,9 @@ class CryptoWritableFile implements WritableFile { @Override public void close() { try { - encryptor.append(FileContentCryptor.EOF); - writeTask.get(); if (file.isOpen()) { + encryptor.append(FileContentCryptor.EOF); + writeTask.get(); writeHeader(); // TODO append padding } diff --git a/main/filesystem-inmemory/src/main/java/org/cryptomator/filesystem/inmem/InMemoryWritableFile.java b/main/filesystem-inmemory/src/main/java/org/cryptomator/filesystem/inmem/InMemoryWritableFile.java index f621f6696..acc00a9e2 100644 --- a/main/filesystem-inmemory/src/main/java/org/cryptomator/filesystem/inmem/InMemoryWritableFile.java +++ b/main/filesystem-inmemory/src/main/java/org/cryptomator/filesystem/inmem/InMemoryWritableFile.java @@ -27,7 +27,7 @@ public class InMemoryWritableFile implements WritableFile { private final Consumer deleter; private final WriteLock writeLock; - private boolean open; + private boolean open = true; private int position = 0; public InMemoryWritableFile(Consumer lastModifiedSetter, Consumer creationTimeSetter, Supplier contentGetter, Consumer contentSetter, Consumer deleter,