From 169f305707fa4be132e25ed6063ff5967645379e Mon Sep 17 00:00:00 2001 From: Max Weber Date: Tue, 29 Oct 2019 21:26:57 -0600 Subject: [PATCH] runelite-client/chat: Be more thread safe --- .../net/runelite/client/chat/ChatCommandManager.java | 4 ++-- .../net/runelite/client/chat/ChatMessageManager.java | 11 ++--------- .../java/net/runelite/client/chat/CommandManager.java | 4 ++-- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java index f930992d08..1000ba641c 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java @@ -24,8 +24,8 @@ */ package net.runelite.client.chat; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.function.BiConsumer; import java.util.function.BiPredicate; @@ -43,7 +43,7 @@ import net.runelite.client.events.PrivateMessageInput; @Singleton public class ChatCommandManager implements ChatboxInputListener { - private final Map commands = new HashMap<>(); + private final Map commands = new ConcurrentHashMap<>(); private final Client client; private final ScheduledExecutorService scheduledExecutorService; diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index fe0bfe0851..991cce5a88 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -556,16 +556,9 @@ public class ChatMessageManager public void process() { - if (!queuedMessages.isEmpty()) + for (QueuedMessage msg; (msg = queuedMessages.poll()) != null; ) { - try - { - queuedMessages.forEach(this::add); - } - finally - { - queuedMessages.clear(); - } + add(msg); } } diff --git a/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java index c066d47681..6c725df06c 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java @@ -25,9 +25,9 @@ */ package net.runelite.client.chat; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; @@ -55,7 +55,7 @@ public class CommandManager private final ClientThread clientThread; private boolean sending; - private final List chatboxInputListenerList = new ArrayList<>(); + private final List chatboxInputListenerList = new CopyOnWriteArrayList<>(); @Inject private CommandManager(Client client, EventBus eventBus, ClientThread clientThread)