From 0a1eaa8600d0223282bb1d507cfec76aeed8c352 Mon Sep 17 00:00:00 2001 From: Markus Kreusch Date: Sun, 17 Jan 2016 19:01:54 +0100 Subject: [PATCH] Fixed exception when closing channel that was opened with exception --- .../filesystem/nio/SharedFileChannel.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/main/filesystem-nio/src/main/java/org/cryptomator/filesystem/nio/SharedFileChannel.java b/main/filesystem-nio/src/main/java/org/cryptomator/filesystem/nio/SharedFileChannel.java index 304fcc746..17516f146 100644 --- a/main/filesystem-nio/src/main/java/org/cryptomator/filesystem/nio/SharedFileChannel.java +++ b/main/filesystem-nio/src/main/java/org/cryptomator/filesystem/nio/SharedFileChannel.java @@ -40,11 +40,19 @@ class SharedFileChannel { public void open(OpenMode mode) { doLocked(() -> { Thread thread = Thread.currentThread(); - if (openedBy.put(thread, thread) != null) { - throw new IllegalStateException("SharedFileChannel already open for current thread"); - } - if (delegate == null) { - createChannel(mode); + boolean failed = true; + try { + if (openedBy.put(thread, thread) != null) { + throw new IllegalStateException("SharedFileChannel already open for current thread"); + } + if (delegate == null) { + createChannel(mode); + } + failed = false; + } finally { + if (failed) { + openedBy.remove(thread); + } } }); }