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.
This commit is contained in:
Florian Schmaus 2020-04-16 21:20:53 +02:00
parent fa643f12d5
commit e2e228fc93
1 changed files with 8 additions and 4 deletions

View File

@ -420,10 +420,14 @@ public class MUCUser implements ExtensionElement {
} }
public static Status create(Integer i) { public static Status create(Integer i) {
Status status = statusMap.get(i); Status status;
if (status == null) { // TODO: Use computeIfAbsent once Smack's minimum required Android SDK level is 24 or higher.
status = new Status(i); synchronized (statusMap) {
statusMap.put(i, status); status = statusMap.get(i);
if (status == null) {
status = new Status(i);
statusMap.put(i, status);
}
} }
return status; return status;
} }