summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-10-12 15:40:24 +0800
committerHung-ying Tyan <tyanh@google.com>2010-10-12 15:41:11 +0800
commitebc886c857a702d788c2bdfb9e0b3d20746ad745 (patch)
treeb90c65f83655c6408549481ab7b7df30d54f7867 /voip
parent4367ab00edb59f95703e4a8a0f9a1a73dbf13551 (diff)
downloadframeworks_base-ebc886c857a702d788c2bdfb9e0b3d20746ad745.zip
frameworks_base-ebc886c857a702d788c2bdfb9e0b3d20746ad745.tar.gz
frameworks_base-ebc886c857a702d788c2bdfb9e0b3d20746ad745.tar.bz2
Fix SipSessionGroup from throwing ConcurrentModificationException
http://b/issue?id=3087256 Change-Id: I67df64105db7c1295649f1f3ce77f99025ce3d44
Diffstat (limited to 'voip')
-rw-r--r--voip/java/com/android/server/sip/SipSessionGroup.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java
index 57b3710..b5f8d39 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");
}