summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-10-12 17:33:27 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-10-12 17:33:27 -0700
commit907f6f1d7d13531015b545861b93e1607d253cfd (patch)
tree35c82f7b190ff8c363c859c46d272b66a53f0e7a
parentc417612a1abb6281697a9738a1a19eb8814ae8a6 (diff)
parentebc886c857a702d788c2bdfb9e0b3d20746ad745 (diff)
downloadframeworks_base-907f6f1d7d13531015b545861b93e1607d253cfd.zip
frameworks_base-907f6f1d7d13531015b545861b93e1607d253cfd.tar.gz
frameworks_base-907f6f1d7d13531015b545861b93e1607d253cfd.tar.bz2
Merge "Fix SipSessionGroup from throwing ConcurrentModificationException" into gingerbread
-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");
}