From 594573faebd72175a29c23153e6336b4c7e3ed1a Mon Sep 17 00:00:00 2001 From: Max Weber Date: Wed, 1 Aug 2018 22:00:05 -0600 Subject: [PATCH] runelite-client: Make ItemManager's price update thread safe --- .../java/net/runelite/client/game/ItemManager.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index 764b30ddfe..aaefdcce9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -27,12 +27,13 @@ package net.runelite.client.game; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; import com.google.common.eventbus.Subscribe; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.IOException; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; +import java.util.Collections; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -77,7 +78,7 @@ public class ItemManager private final ItemClient itemClient = new ItemClient(); private final LoadingCache itemSearches; - private final ConcurrentMap itemPrices = new ConcurrentHashMap<>(); + private Map itemPrices = Collections.emptyMap(); private final LoadingCache itemImages; private final LoadingCache itemCompositions; private final LoadingCache itemOutlines; @@ -147,11 +148,12 @@ public class ItemManager ItemPrice[] prices = itemClient.getPrices(); if (prices != null) { - itemPrices.clear(); + ImmutableMap.Builder map = ImmutableMap.builderWithExpectedSize(prices.length); for (ItemPrice price : prices) { - itemPrices.put(price.getItem().getId(), price); + map.put(price.getItem().getId(), price); } + itemPrices = map.build(); } log.debug("Loaded {} prices", itemPrices.size());