From 7e416aa19e93487be73d6178205cda8670ac657c Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Tue, 3 Dec 2019 23:16:10 +0900 Subject: [PATCH] [NS A40] Read current reassignment state instead of global state The reassignment state has the future value, but is transient instead of global. With this, the reassignment loop does not read from global state any more, so it's not affected by the side effects from the loop. This means future patches will be able to move the side effects out of the computation. Test: atest ConnectivityServiceTest Change-Id: I43499f19730bcd94b691cfea83aa1ca1d3de75db --- .../core/java/com/android/server/ConnectivityService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 24a92d07e5..6db73bfa66 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -6511,6 +6511,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } private ArrayMap computeRequestReassignmentForNetwork( + @NonNull final NetworkReassignment changes, @NonNull final NetworkAgentInfo newNetwork) { final int score = newNetwork.getCurrentScore(); final ArrayMap reassignedRequests = new ArrayMap<>(); @@ -6521,7 +6522,10 @@ public class ConnectivityService extends IConnectivityManager.Stub // requests or not, and doesn't affect the network's score. if (nri.request.isListen()) continue; - final NetworkAgentInfo currentNetwork = nri.mSatisfier; + // The reassignment has been seeded with the initial assignment, therefore + // getReassignment can't be null and mNewNetwork is only null if there was no + // satisfier in the first place or there was an explicit reassignment to null. + final NetworkAgentInfo currentNetwork = changes.getReassignment(nri).mNewNetwork; final boolean satisfies = newNetwork.satisfies(nri.request); if (newNetwork == currentNetwork && satisfies) continue; @@ -6571,7 +6575,7 @@ public class ConnectivityService extends IConnectivityManager.Stub if (VDBG || DDBG) log("rematching " + newNetwork.name()); final ArrayMap reassignedRequests = - computeRequestReassignmentForNetwork(newNetwork); + computeRequestReassignmentForNetwork(changes, newNetwork); // Find and migrate to this Network any NetworkRequests for // which this network is now the best.