From 40c74b432ed5151538fd50218a19e6973524d98e Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Tue, 21 Oct 2014 23:59:02 +0200 Subject: [PATCH] made iterating over hashmap in notification service thread safe --- .../conversations/services/NotificationService.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/eu/siacs/conversations/services/NotificationService.java b/src/eu/siacs/conversations/services/NotificationService.java index 8eba49a9..7a116ed4 100644 --- a/src/eu/siacs/conversations/services/NotificationService.java +++ b/src/eu/siacs/conversations/services/NotificationService.java @@ -1,7 +1,9 @@ package eu.siacs.conversations.services; import java.util.ArrayList; +import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -130,7 +132,11 @@ public class NotificationService { .getString(R.string.unread_conversations)); StringBuilder names = new StringBuilder(); Conversation conversation = null; - for (ArrayList messages : notifications.values()) { + Iterator>> it = notifications + .entrySet().iterator(); + while (it.hasNext()) { + Entry> entry = it.next(); + ArrayList messages = entry.getValue(); if (messages.size() > 0) { conversation = messages.get(0).getConversation(); String name = conversation.getName(); @@ -142,6 +148,7 @@ public class NotificationService { names.append(name); names.append(", "); } + it.remove(); } if (names.length() >= 2) { names.delete(names.length() - 2, names.length());