From d71bea9f8acd0fd3213662b7f3f48f64a82cb385 Mon Sep 17 00:00:00 2001 From: "Kristian S. Stangeland" Date: Sun, 22 Dec 2013 01:01:35 +0100 Subject: [PATCH] Don't pass NULL to ConcurrentHashMap when reading or removing. May fix issue 181 on BukkitDev. --- .../concurrency/ConcurrentPlayerMap.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/concurrency/ConcurrentPlayerMap.java b/ProtocolLib/src/main/java/com/comphenix/protocol/concurrency/ConcurrentPlayerMap.java index 56d9525a..04c8e1ea 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/concurrency/ConcurrentPlayerMap.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/concurrency/ConcurrentPlayerMap.java @@ -223,10 +223,13 @@ public class ConcurrentPlayerMap extends AbstractMap imp public TValue remove(Object key) { if (key instanceof Player) { Object playerKey = keyMethod.apply((Player) key); - TValue value = valueLookup.remove(playerKey); - keyLookup.remove(playerKey); - return value; + if (playerKey != null) { + TValue value = valueLookup.remove(playerKey); + + keyLookup.remove(playerKey); + return value; + } } return null; } @@ -236,7 +239,7 @@ public class ConcurrentPlayerMap extends AbstractMap imp if (key instanceof Player) { Object playerKey = keyMethod.apply((Player) key); - if (valueLookup.remove(playerKey, value)) { + if (playerKey != null && valueLookup.remove(playerKey, value)) { keyLookup.remove(playerKey); return true; } @@ -246,15 +249,19 @@ public class ConcurrentPlayerMap extends AbstractMap imp @Override public TValue get(Object key) { - if (key instanceof Player) - return valueLookup.get(keyMethod.apply((Player) key)); + if (key instanceof Player) { + Object playerKey = keyMethod.apply((Player) key); + return playerKey != null ? valueLookup.get(playerKey) : null; + } return null; } @Override public boolean containsKey(Object key) { - if (key instanceof Player) - return valueLookup.containsKey(keyMethod.apply((Player) key)); + if (key instanceof Player) { + Object playerKey = keyMethod.apply((Player) key); + return playerKey != null && valueLookup.containsKey(playerKey); + } return false; }