OSDN Git Service

Use iterator to remove elements from cache
authorArthur Ishiguro <arthuri@google.com>
Fri, 15 Dec 2017 16:24:47 +0000 (08:24 -0800)
committerArthur Ishiguro <arthuri@google.com>
Fri, 15 Dec 2017 17:28:15 +0000 (09:28 -0800)
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

services/core/java/com/android/server/location/NanoAppStateManager.java

index 81c4784..9869626 100644 (file)
@@ -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<NanoAppInstanceInfo> iterator = mNanoAppHash.values().iterator();
+        while (iterator.hasNext()) {
+            NanoAppInstanceInfo info = iterator.next();
             if (info.getContexthubId() == contextHubId &&
                     !nanoAppIdSet.contains(info.getAppId())) {
-                mNanoAppHash.remove(nanoAppHandle);
+                iterator.remove();
             }
         }
     }