diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java index 526b4ffabb..e10d737335 100644 --- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java +++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java @@ -462,9 +462,10 @@ public class KeepaliveTracker { } public void handleStopAllKeepalives(NetworkAgentInfo nai, int reason) { - HashMap networkKeepalives = mKeepalives.get(nai); + final HashMap networkKeepalives = mKeepalives.get(nai); if (networkKeepalives != null) { - for (KeepaliveInfo ki : networkKeepalives.values()) { + final ArrayList kalist = new ArrayList(networkKeepalives.values()); + for (KeepaliveInfo ki : kalist) { ki.stop(reason); // Clean up keepalives since the network agent is disconnected and unable to pass // back asynchronous result of stop().