diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-03 10:57:44 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-03 10:57:44 +0100 |
| commit | e9723a813bd8ee4d92efb68c0b0910ab9c13ade8 (patch) | |
| tree | f6e0bebc357b1591d240840a082b8ddc88b8ec60 | |
| parent | 3a1c48b57a812ba11296e49ede79342b0531c0e1 (diff) | |
Change locks to prevent potential unlock exception
| -rw-r--r-- | src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java | 17 |
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(); } } } |
