From a6b5fdad39793264fe689d9881c46b174d9f8b64 Mon Sep 17 00:00:00 2001 From: Arthur Ishiguro Date: Fri, 15 Dec 2017 08:24:47 -0800 Subject: [PATCH] Use iterator to remove elements from cache Otherwise will throw ConcurrentModificationException when removing entries. Bug: 70715292 Test: Run CHQTS, verify pass. Also force remove an entry and verify no exception is thrown. Change-Id: Id702990ed0ddc1f2cc55dc0d450b9c6aac3d65ff --- .../java/com/android/server/location/NanoAppStateManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/location/NanoAppStateManager.java b/services/core/java/com/android/server/location/NanoAppStateManager.java index 81c47849c3ad..98696265c209 100644 --- a/services/core/java/com/android/server/location/NanoAppStateManager.java +++ b/services/core/java/com/android/server/location/NanoAppStateManager.java @@ -24,6 +24,7 @@ import android.util.Log; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; /** @@ -153,11 +154,12 @@ import java.util.List; nanoAppIdSet.add(appInfo.appId); } - for (int nanoAppHandle : mNanoAppHash.keySet()) { - NanoAppInstanceInfo info = mNanoAppHash.get(nanoAppHandle); + Iterator iterator = mNanoAppHash.values().iterator(); + while (iterator.hasNext()) { + NanoAppInstanceInfo info = iterator.next(); if (info.getContexthubId() == contextHubId && !nanoAppIdSet.contains(info.getAppId())) { - mNanoAppHash.remove(nanoAppHandle); + iterator.remove(); } } } -- 2.11.0