From ebc886c857a702d788c2bdfb9e0b3d20746ad745 Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Tue, 12 Oct 2010 15:40:24 +0800 Subject: [PATCH] Fix SipSessionGroup from throwing ConcurrentModificationException http://b/issue?id=3087256 Change-Id: I67df64105db7c1295649f1f3ce77f99025ce3d44 --- voip/java/com/android/server/sip/SipSessionGroup.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java index 57b3710cf30d4..b5f8d39c6edb5 100644 --- a/voip/java/com/android/server/sip/SipSessionGroup.java +++ b/voip/java/com/android/server/sip/SipSessionGroup.java @@ -153,7 +153,13 @@ class SipSessionGroup implements SipListener { } synchronized void onConnectivityChanged() { - for (SipSessionImpl s : mSessionMap.values()) { + SipSessionImpl[] ss = mSessionMap.values().toArray( + new SipSessionImpl[mSessionMap.size()]); + // Iterate on the copied array instead of directly on mSessionMap to + // avoid ConcurrentModificationException being thrown when + // SipSessionImpl removes itself from mSessionMap in onError() in the + // following loop. + for (SipSessionImpl s : ss) { s.onError(SipErrorCode.DATA_CONNECTION_LOST, "data connection lost"); }