From 17dc32bb79ce1bc7f3f3ee08ec5a0c732758bf4b Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 23 Mar 2021 12:52:38 +0100 Subject: [PATCH] lock vault on external unmount --- .../main/java/org/cryptomator/common/vaults/Vault.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java index 98a6cf21b..5c87be3be 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -42,6 +42,7 @@ import java.util.EnumSet; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; @@ -139,7 +140,14 @@ public class Vault { cryptoFileSystem.set(fs); try { volume = volumeProvider.get(); - volume.mount(fs, getEffectiveMountFlags()); + volume.mount(fs, getEffectiveMountFlags()).handle((voit, throwable) -> { + destroyCryptoFileSystem(); + setState(VaultState.LOCKED); //TODO: possible race conditions of the vault state. Use Platform.runLater()? + if (throwable != null) { + LOG.warn("Unexpected unmount and lock of vault" + getDisplayName(), throwable); + } + return CompletableFuture.completedFuture(null); + }); } catch (Exception e) { destroyCryptoFileSystem(); throw e;