MediaBrowserServiceCompat: Fix ConcurrentModificationException
Bug:29438709
Change-Id: I9ee4c30b9ac8117062d1971604e1f7fa03c62f09
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
index e9b773a..bde0831 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
@@ -71,6 +71,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
/**
@@ -153,14 +154,15 @@
mHandler.post(new Runnable() {
@Override
public void run() {
- for (IBinder key : mConnections.keySet()) {
- ConnectionRecord connection = mConnections.get(key);
+ Iterator<ConnectionRecord> iter = mConnections.values().iterator();
+ while (iter.hasNext()){
+ ConnectionRecord connection = iter.next();
try {
connection.callbacks.onConnect(connection.root.getRootId(), token,
connection.root.getExtras());
} catch (RemoteException e) {
Log.w(TAG, "Connection for " + connection.pkg + " is no longer valid.");
- mConnections.remove(key);
+ iter.remove();
}
}
}
@@ -1002,10 +1004,11 @@
boolean removed = false;
List<Pair<IBinder, Bundle>> callbackList = connection.subscriptions.get(id);
if (callbackList != null) {
- for (Pair<IBinder, Bundle> callback : callbackList) {
- if (token == callback.first) {
+ Iterator<Pair<IBinder, Bundle>> iter = callbackList.iterator();
+ while (iter.hasNext()){
+ if (token == iter.next().first) {
removed = true;
- callbackList.remove(callback);
+ iter.remove();
}
}
if (callbackList.size() == 0) {