From e2e228fc93ef0cbdd31cde119413d1561a251bd0 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 16 Apr 2020 21:20:53 +0200 Subject: [PATCH] muc: synchronize Stats.create(Integer) Since this method is used by the MUCUserProvider, it is potentially invoked concurrently and the access to the statusMap must be synchronized then. --- .../org/jivesoftware/smackx/muc/packet/MUCUser.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java index eda58e90e..81eda1319 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java @@ -420,10 +420,14 @@ public class MUCUser implements ExtensionElement { } public static Status create(Integer i) { - Status status = statusMap.get(i); - if (status == null) { - status = new Status(i); - statusMap.put(i, status); + Status status; + // TODO: Use computeIfAbsent once Smack's minimum required Android SDK level is 24 or higher. + synchronized (statusMap) { + status = statusMap.get(i); + if (status == null) { + status = new Status(i); + statusMap.put(i, status); + } } return status; }