From 6d1910fc0d95a01109eb7e4a011a8ed3b8e2343e Mon Sep 17 00:00:00 2001 From: Sungsoo Lim Date: Fri, 17 Jun 2016 13:49:13 +0900 Subject: [PATCH] MediaBrowserService: Fix ConcurrentModificationException Bug:29438709 Change-Id: Ide54ef7daf4ef78d43485c72e91fd63bc4f99144 --- .../service/media/MediaBrowserService.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java index c0d950323db5f..6321b7b9e287b 100644 --- a/media/java/android/service/media/MediaBrowserService.java +++ b/media/java/android/service/media/MediaBrowserService.java @@ -48,6 +48,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; /** @@ -465,14 +466,15 @@ public abstract class MediaBrowserService extends Service { mHandler.post(new Runnable() { @Override public void run() { - for (IBinder key : mConnections.keySet()) { - ConnectionRecord connection = mConnections.get(key); + Iterator 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(); } } } @@ -610,10 +612,11 @@ public abstract class MediaBrowserService extends Service { boolean removed = false; List> callbackList = connection.subscriptions.get(id); if (callbackList != null) { - for (Pair callback : callbackList) { - if (token == callback.first) { + Iterator> iter = callbackList.iterator(); + while (iter.hasNext()){ + if (token == iter.next().first) { removed = true; - callbackList.remove(callback); + iter.remove(); } } if (callbackList.size() == 0) {