From 51390a969809f779bd867d697e3b7950fdf2740c Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 6 Dec 2011 14:39:52 +0100 Subject: Prevent some rare cases of NPE and Deadlocks, better error handling on yaml load --- .../earth2me/essentials/spawn/SpawnStorage.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java') diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java index ac98b5921..02fb26c9b 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java @@ -6,12 +6,14 @@ import com.earth2me.essentials.IEssentialsModule; import com.earth2me.essentials.settings.Spawns; import com.earth2me.essentials.storage.AbstractDelayedYamlFileReader; import com.earth2me.essentials.storage.AbstractDelayedYamlFileWriter; +import com.earth2me.essentials.storage.ObjectLoadException; import com.earth2me.essentials.storage.StorageObject; import java.io.File; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -35,6 +37,10 @@ public class SpawnStorage implements IConf, IEssentialsModule rwl.writeLock().lock(); try { + if (spawns == null) + { + spawns = new Spawns(); + } if (spawns.getSpawns() == null) { spawns.setSpawns(new HashMap()); @@ -136,9 +142,21 @@ public class SpawnStorage implements IConf, IEssentialsModule } @Override - public void onFinish(final Spawns object) + public void onSuccess(final Spawns object) + { + if (object != null) + { + spawns = object; + } + rwl.writeLock().unlock(); + } + + @Override + public void onException() { - spawns = object; + if (spawns == null) { + spawns = new Spawns(); + } rwl.writeLock().unlock(); } } -- cgit v1.2.3