From 208fdd65b20e298b00610435c6ee7c31751dcbd4 Mon Sep 17 00:00:00 2001 From: jsownz Date: Wed, 20 Jun 2018 11:12:41 -0700 Subject: [PATCH] Switching HashMap to ConcurrentHashMap to address ConcurrentModificationException on server start --- .gitignore | 3 +++ .../resources/gameplay/world/travel/TravelHelper.java | 7 ++++--- .../gameplay/world/travel/TravelPointManager.java | 5 +++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 2ff1580a4..67b32dbbd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ Holocore.iml out .idea +.classpath +.project # Gradle build @@ -14,5 +16,6 @@ build /log/ /cfg/ /odb/ +/bin/ *.db *.iff diff --git a/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelHelper.java b/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelHelper.java index db247b15c..27d41cde0 100644 --- a/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelHelper.java +++ b/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelHelper.java @@ -52,6 +52,7 @@ import me.joshlarson.jlcommon.log.Log; import java.io.File; import java.io.IOException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class TravelHelper { @@ -61,7 +62,7 @@ public class TravelHelper { private final TravelPointManager pointManager; public TravelHelper() { - this.travel = new HashMap<>(); + this.travel = new ConcurrentHashMap<>(); this.travelExecutor = new ThreadPool(3, "travel-shuttles-%d"); this.routeManager = new AllowedRouteManager(); this.pointManager = new TravelPointManager(); @@ -268,11 +269,11 @@ public class TravelHelper { private final Map> routeCosts; public AllowedRouteManager() { - this.routeCosts = new HashMap<>(); + this.routeCosts = new ConcurrentHashMap<>(); } public void addRoute(Terrain departure, Terrain destination, int fee) { - Map departureCosts = routeCosts.computeIfAbsent(departure, k -> new HashMap<>()); + Map departureCosts = routeCosts.computeIfAbsent(departure, k -> new ConcurrentHashMap<>()); departureCosts.put(destination, fee); } diff --git a/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelPointManager.java b/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelPointManager.java index 5185b1655..5f39f8b6d 100644 --- a/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelPointManager.java +++ b/src/main/java/com/projectswg/holocore/resources/gameplay/world/travel/TravelPointManager.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class TravelPointManager { @@ -40,8 +41,8 @@ public class TravelPointManager { private final Map> starportPoints; public TravelPointManager() { - this.shuttlePoints = new HashMap<>(); - this.starportPoints = new HashMap<>(); + this.shuttlePoints = new ConcurrentHashMap<>(); + this.starportPoints = new ConcurrentHashMap<>(); } public void addTravelPoint(TravelPoint point) {