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/EssentialsSpawn.java | 1 + .../earth2me/essentials/spawn/SpawnStorage.java | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'EssentialsSpawn/src') diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java index 6f6244f25..ad42f9dee 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java @@ -35,6 +35,7 @@ public class EssentialsSpawn extends JavaPlugin } spawns = new SpawnStorage(ess); + ess.addReloadListener(spawns); final EssentialsSpawnPlayerListener playerListener = new EssentialsSpawnPlayerListener(ess, spawns); pluginManager.registerEvent(Type.PLAYER_RESPAWN, playerListener, Priority.Low, this); 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