Only unlock if previously locked (#2489)

This commit is contained in:
Hannes Greule 2023-11-08 21:39:25 +01:00 committed by GitHub
parent 1996a38b46
commit 46dd71e807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -100,7 +100,6 @@ import java.util.TimeZone;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -406,7 +405,8 @@ public class LocalSession implements TextureHolder {
*/ */
public void clearHistory() { public void clearHistory() {
//FAWE start //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) // Do not make main thread wait if we cannot immediately clear history (on player logout usually)
TaskManager.taskManager().async(this::clearHistoryTask); TaskManager.taskManager().async(this::clearHistoryTask);
return; return;
@ -414,9 +414,12 @@ public class LocalSession implements TextureHolder {
try { try {
clearHistoryTask(); clearHistoryTask();
} finally { } finally {
// only if we are on the main thread, we ever called tryLock -> need to unlock again
if (mainThread) {
historyWriteLock.unlock(); historyWriteLock.unlock();
} }
} }
}
private void clearHistoryTask() { private void clearHistoryTask() {
historyWriteLock.lock(); historyWriteLock.lock();