From ab7b20871aa5c584827c236b50c5c26d650b4908 Mon Sep 17 00:00:00 2001 From: gitlab-runner Date: Sat, 30 Nov 2019 17:27:56 +0800 Subject: [PATCH] Fix race condition during SensitiveFilter update --- .../java/io/moquette/persistence/MemoryMessagesStore.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 1036c84d..9c07b14a 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -41,6 +41,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -110,7 +111,7 @@ public class MemoryMessagesStore implements IMessagesStore { private final DatabaseStore databaseStore; private ConcurrentHashMap userMaxPullSeq = new ConcurrentHashMap<>(); - private SensitiveFilter mSensitiveFilter; + private AtomicReference mSensitiveFilter; private volatile long lastUpdateSensitiveTime = 0; private ConcurrentHashMap userGlobalSlientMap = new ConcurrentHashMap<>(); @@ -145,7 +146,7 @@ public class MemoryMessagesStore implements IMessagesStore { } } Set sensitiveWords = databaseStore.getSensitiveWord(); - mSensitiveFilter = new SensitiveFilter(sensitiveWords); + mSensitiveFilter.set(new SensitiveFilter(sensitiveWords)); } } @@ -2492,7 +2493,7 @@ public class MemoryMessagesStore implements IMessagesStore { @Override public Set handleSensitiveWord(String message) { updateSensitiveWord(); - return mSensitiveFilter.getSensitiveWords(message, SensitiveFilter.MatchType.MAX_MATCH); + return mSensitiveFilter.get().getSensitiveWords(message, SensitiveFilter.MatchType.MAX_MATCH); } @Override