mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 06:12:05 +01:00
Fix getPresence ConcurrentModificationException
Fix for SMACK-841 Since Smack 4.2.4, the getPresencesInternal method in the Roster class can return a LruCache object, which is a LinkedHashMap with access order. This means that any access using get or getOrDefault will be a modification of the Map. If you loop over the keySet of the Map and there are more than one, the second call to get will throw a ConcurrentModificationException! Since the keys are only used here to obtain the corresponding values, the simplest solution is to just loop over the values instead.
This commit is contained in:
parent
1aa35bc957
commit
1e21ab763c
1 changed files with 1 additions and 2 deletions
|
@ -951,8 +951,7 @@ public final class Roster extends Manager {
|
||||||
// This is used in case no available presence is found
|
// This is used in case no available presence is found
|
||||||
Presence unavailable = null;
|
Presence unavailable = null;
|
||||||
|
|
||||||
for (Resourcepart resource : userPresences.keySet()) {
|
for (Presence p : userPresences.values()) {
|
||||||
Presence p = userPresences.get(resource);
|
|
||||||
if (!p.isAvailable()) {
|
if (!p.isAvailable()) {
|
||||||
unavailable = p;
|
unavailable = p;
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in a new issue