aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-06-03 10:57:44 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-06-03 10:57:44 +0100
commite9723a813bd8ee4d92efb68c0b0910ab9c13ade8 (patch)
treef6e0bebc357b1591d240840a082b8ddc88b8ec60
parent3a1c48b57a812ba11296e49ede79342b0531c0e1 (diff)
Change locks to prevent potential unlock exception
-rw-r--r--src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java b/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java
index 690e6fed..ababef3e 100644
--- a/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java
+++ b/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java
@@ -24,18 +24,15 @@ public class YamlStorageProvider implements StorageProvider {
this.plugin = plugin;
}
- private void lock(UUID uuid) {
+ private ReentrantLock lock(UUID uuid) {
locks.putIfAbsent(uuid, new ReentrantLock());
- locks.get(uuid).lock();
- }
-
- private void unlock(UUID uuid) {
ReentrantLock lock = locks.get(uuid);
- if (lock != null) lock.unlock();
+ lock.lock();
+ return lock;
}
public QuestProgressFile loadProgressFile(UUID uuid) {
- lock(uuid);
+ ReentrantLock lock = lock(uuid);
QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin);
try {
File directory = new File(plugin.getDataFolder() + File.separator + "playerdata");
@@ -75,14 +72,14 @@ public class YamlStorageProvider implements StorageProvider {
ex.printStackTrace();
// fuck
} finally {
- unlock(uuid);
+ lock.unlock();
}
return questProgressFile;
}
public void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile) {
- lock(uuid);
+ ReentrantLock lock = lock(uuid);
try {
List<QuestProgress> questProgressValues = new ArrayList<>(questProgressFile.getAllQuestProgress());
File directory = new File(plugin.getDataFolder() + File.separator + "playerdata");
@@ -123,7 +120,7 @@ public class YamlStorageProvider implements StorageProvider {
e.printStackTrace();
}
} finally {
- unlock(uuid);
+ lock.unlock();
}
}
}