From 05edd05f53f19b35816c01032d7eb7b183735927 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Fri, 22 Nov 2019 22:39:56 +0900 Subject: [PATCH] [NS A23] Move a synchronized block in a central place As the calls to this apparently need to be synchronized, let's do it all in the same place instead of in all callers Test: FrameworksNetTests Change-Id: I0c097e7756fc155ba0243834b84626e86c68340e --- .../android/server/ConnectivityService.java | 26 +++++++++---------- .../server/connectivity/NetworkAgentInfo.java | 7 ++++- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index fc9c9cd364..325bc19686 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -5596,7 +5596,7 @@ public class ConnectivityService extends IConnectivityManager.Stub ns, mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, mDnsResolver, mNMS, factorySerialNumber); // Make sure the network capabilities reflect what the agent info says. - nai.setNetworkCapabilities(mixInCapabilities(nai, nc)); + nai.getAndSetNetworkCapabilities(mixInCapabilities(nai, nc)); final String extraInfo = networkInfo.getExtraInfo(); final String name = TextUtils.isEmpty(extraInfo) ? nai.networkCapabilities.getSSID() : extraInfo; @@ -5950,11 +5950,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - final NetworkCapabilities prevNc; - synchronized (nai) { - prevNc = nai.networkCapabilities; - nai.setNetworkCapabilities(newNc); - } + final NetworkCapabilities prevNc = nai.getAndSetNetworkCapabilities(newNc); updateUids(nai, prevNc, newNc); @@ -6476,6 +6472,11 @@ public class ConnectivityService extends IConnectivityManager.Stub // before LegacyTypeTracker sends legacy broadcasts for (NetworkRequestInfo nri : addedRequests) notifyNetworkAvailable(newNetwork, nri); + // Finally, process listen requests and update capabilities if the background state has + // changed for this network. For consistency with previous behavior, send onLost callbacks + // before onAvailable. + processNewlyLostListenRequests(newNetwork); + // Maybe the network changed background states. Update its capabilities. final boolean backgroundChanged = wasBackgroundNetwork != newNetwork.isBackgroundNetwork(); if (backgroundChanged) { @@ -6492,13 +6493,11 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - synchronized (newNetwork) { - newNetwork.setNetworkCapabilities(newNc); - } + newNetwork.getAndSetNetworkCapabilities(newNc); + notifyNetworkCallbacks(newNetwork, ConnectivityManager.CALLBACK_CAP_CHANGED); } - // Finally, process listen requests. - processListenRequests(newNetwork, backgroundChanged); + processNewlySatisfiedListenRequests(newNetwork); } /** @@ -6683,9 +6682,8 @@ public class ConnectivityService extends IConnectivityManager.Stub // NetworkCapabilities need to be set before sending the private DNS config to // NetworkMonitor, otherwise NetworkMonitor cannot determine if validation is required. - synchronized (networkAgent) { - networkAgent.setNetworkCapabilities(networkAgent.networkCapabilities); - } + networkAgent.getAndSetNetworkCapabilities(networkAgent.networkCapabilities); + handlePerNetworkPrivateDnsConfig(networkAgent, mDnsManager.getPrivateDnsConfig()); updateLinkProperties(networkAgent, new LinkProperties(networkAgent.linkProperties), null); diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index bb7f86233a..5e085ca293 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -291,13 +291,18 @@ public class NetworkAgentInfo implements Comparable { * *

If {@link NetworkMonitor#notifyNetworkCapabilitiesChanged(NetworkCapabilities)} fails, * the exception is logged but not reported to callers. + * + * @return the old capabilities of this network. */ - public void setNetworkCapabilities(NetworkCapabilities nc) { + public synchronized NetworkCapabilities getAndSetNetworkCapabilities( + @NonNull final NetworkCapabilities nc) { + final NetworkCapabilities oldNc = networkCapabilities; networkCapabilities = nc; final NetworkMonitorManager nm = mNetworkMonitor; if (nm != null) { nm.notifyNetworkCapabilitiesChanged(nc); } + return oldNc; } public ConnectivityService connService() {