From 46dd71e8078c860cc27f19663ffe926e2657bdab Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Wed, 8 Nov 2023 21:39:25 +0100 Subject: [PATCH] Only unlock if previously locked (#2489) --- .../src/main/java/com/sk89q/worldedit/LocalSession.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java index ae62a4f73..67bbff7af 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -100,7 +100,6 @@ import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -406,7 +405,8 @@ public class LocalSession implements TextureHolder { */ public void clearHistory() { //FAWE start - if (Fawe.isMainThread() && !historyWriteLock.tryLock()) { + boolean mainThread = Fawe.isMainThread(); + if (mainThread && !historyWriteLock.tryLock()) { // Do not make main thread wait if we cannot immediately clear history (on player logout usually) TaskManager.taskManager().async(this::clearHistoryTask); return; @@ -414,7 +414,10 @@ public class LocalSession implements TextureHolder { try { clearHistoryTask(); } finally { - historyWriteLock.unlock(); + // only if we are on the main thread, we ever called tryLock -> need to unlock again + if (mainThread) { + historyWriteLock.unlock(); + } } }