From 1c75c2309a3fc6bc13a5b874613d52c4a00286e6 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Thu, 7 Nov 2019 17:46:33 +0900 Subject: [PATCH] [NS A05] Move some side effects out of the network decision loop This moves the side effects done by the decision loop when a network stops satisfying a request to outside the decision loop. Bug: 113554781 Test: ConnectivityServiceTest Change-Id: I7b7594250d5c04362c699e065d30a1181effed09 --- .../java/com/android/server/ConnectivityService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index b614462af3..49ac9db958 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -6407,6 +6407,14 @@ public class ConnectivityService extends IConnectivityManager.Stub } } else if (newNetwork.isSatisfyingRequest(nri.request.requestId)) { reassignedRequests.put(nri, null); + } + } + + for (final Map.Entry entry : + reassignedRequests.entrySet()) { + final NetworkRequestInfo nri = entry.getKey(); + final NetworkAgentInfo previousSatisfier = nri.mSatisfier; + if (entry.getValue() == null) { // If "newNetwork" is listed as satisfying "nri" but no longer satisfies "nri", // mark it as no longer satisfying "nri". Because networks are processed by // rematchAllNetworksAndRequests() in descending score order, "currentNetwork" will @@ -6419,7 +6427,7 @@ public class ConnectivityService extends IConnectivityManager.Stub " request " + nri.request.requestId); } newNetwork.removeRequest(nri.request.requestId); - if (currentNetwork == newNetwork) { + if (previousSatisfier == newNetwork) { nri.mSatisfier = null; if (isDefaultRequest(nri)) mDefaultNetworkNai = null; sendUpdatedScoreToFactories(nri.request, null); @@ -6438,6 +6446,7 @@ public class ConnectivityService extends IConnectivityManager.Stub callCallbackForRequest(nri, newNetwork, ConnectivityManager.CALLBACK_LOST, 0); } } + if (isNewDefault) { updateDataActivityTracking(newNetwork, oldDefaultNetwork); // Notify system services that this network is up.