diff --git a/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java b/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java index cd27318567..69471a1516 100644 --- a/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java +++ b/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java @@ -398,10 +398,10 @@ public class UpstreamNetworkMonitor { // notifications (e.g. matching more than one of our callbacks). // // Also, it can happen that onLinkPropertiesChanged is called after - // onLost removed the state from mNetworkMap. This appears to be due - // to a bug in disconnectAndDestroyNetwork, which calls - // nai.clatd.update() after the onLost callbacks. - // TODO: fix the bug and make this method void. + // onLost removed the state from mNetworkMap. This is due to a bug + // in disconnectAndDestroyNetwork, which calls nai.clatd.update() + // after the onLost callbacks. This was fixed in S. + // TODO: make this method void when R is no longer supported. return null; } diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index eb7dccc0b7..6113ef3941 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -6299,8 +6299,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // there may not be a strict 1:1 correlation between the two. private final NetIdManager mNetIdManager; - // NetworkAgentInfo keyed off its connecting messenger - // TODO - eval if we can reduce the number of lists/hashmaps/sparsearrays + // Tracks all NetworkAgents that are currently registered. // NOTE: Only should be accessed on ConnectivityServiceThread, except dump(). private final ArraySet mNetworkAgentInfos = new ArraySet<>(); @@ -7452,7 +7451,7 @@ public class ConnectivityService extends IConnectivityManager.Stub public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) { ensureRunningOnConnectivityServiceThread(); - if (getNetworkAgentInfoForNetId(nai.network.getNetId()) != nai) { + if (!mNetworkAgentInfos.contains(nai)) { // Ignore updates for disconnected networks return; } diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 1e5e278e09..a9612def0c 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -8631,13 +8631,8 @@ public class ConnectivityServiceTest { // Disconnect the network. clat is stopped and the network is destroyed. mCellNetworkAgent.disconnect(); networkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); - // TODO: delete this spurious onLinkPropertiesChanged callback. - networkCallback.expectLinkPropertiesThat(mCellNetworkAgent, - lp -> lp.getStackedLinks().isEmpty()); networkCallback.assertNoCallback(); verify(mMockNetd).clatdStop(MOBILE_IFNAME); - verify(mMockNetd).networkRemoveInterface(cellNetId, CLAT_MOBILE_IFNAME); - assertRoutesRemoved(cellNetId, stackedDefault); verify(mMockNetd).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(), eq(Integer.toString(TRANSPORT_CELLULAR))); verify(mMockNetd).networkDestroy(cellNetId);