From ee08087871955a7387d6360713b9974bca53f159 Mon Sep 17 00:00:00 2001 From: games647 Date: Sun, 8 May 2016 20:44:18 +0200 Subject: [PATCH] Fix a couple race conditions (Fixes #698 and #697) --- .../java/fr/xephi/authme/cache/limbo/LimboCache.java | 4 ++-- .../xephi/authme/listener/AuthMePlayerListener.java | 2 +- .../xephi/authme/process/join/AsynchronousJoin.java | 11 +++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java index 49eaf9ee..780aa12a 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java @@ -83,9 +83,9 @@ public class LimboCache { public void deleteLimboPlayer(String name) { checkNotNull(name); name = name.toLowerCase(); - if (cache.containsKey(name)) { + LimboPlayer cachedPlayer = cache.remove(name); + if (cachedPlayer != null) { cache.get(name).clearTasks(); - cache.remove(name); } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 68f72d60..7dddaa12 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -175,7 +175,7 @@ public class AuthMePlayerListener implements Listener { return; } - /* + /* * Limit player X and Z movements to 1 block * Deny player Y+ movements (allows falling) */ diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index c9ab7159..3aff8941 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -5,6 +5,7 @@ import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.cache.limbo.LimboCache; +import fr.xephi.authme.cache.limbo.LimboPlayer; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.events.FirstSpawnTeleportEvent; import fr.xephi.authme.events.ProtectInventoryEvent; @@ -208,7 +209,10 @@ public class AsynchronousJoin implements Process { int msgInterval = service.getProperty(RegistrationSettings.MESSAGE_INTERVAL); if (registrationTimeout > 0) { BukkitTask id = service.runTaskLater(new TimeoutTask(plugin, name, player), registrationTimeout); - LimboCache.getInstance().getLimboPlayer(name).setTimeoutTask(id); + LimboPlayer limboPlayer = LimboCache.getInstance().getLimboPlayer(name); + if (limboPlayer != null) { + limboPlayer.setTimeoutTask(id); + } } MessageKey msg; @@ -222,7 +226,10 @@ public class AsynchronousJoin implements Process { if (msgInterval > 0 && LimboCache.getInstance().getLimboPlayer(name) != null) { BukkitTask msgTask = service.runTask(new MessageTask(service.getBukkitService(), plugin.getMessages(), name, msg, msgInterval)); - LimboCache.getInstance().getLimboPlayer(name).setMessageTask(msgTask); + LimboPlayer limboPlayer = LimboCache.getInstance().getLimboPlayer(name); + if (limboPlayer != null) { + limboPlayer.setMessageTask(msgTask); + } } }