summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Jensen <pauljensen@google.com> 2015-01-06 14:57:44 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-01-06 14:57:44 +0000
commit932bfab9aaa58f116935eb0a1f22de49301724c4 (patch)
treeac4308f888b784eba3f7ac6109b29311904d8460
parent031acc4b3920336e58c56abb99322cbeb9be9e5c (diff)
parent6c93739f2f25c8afb77997165fa86be537df67a9 (diff)
am 6c93739f: am 9ffb53cb: Clear process DNS NetID binding when expiring or releaseing legacy requests.
* commit '6c93739f2f25c8afb77997165fa86be537df67a9': Clear process DNS NetID binding when expiring or releaseing legacy requests.
-rw-r--r--core/java/android/net/ConnectivityManager.java33
1 files changed, 18 insertions, 15 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 17ee494622a0..cdc8661b1695 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -933,10 +933,8 @@ public class ConnectivityManager {
return -1;
}
- NetworkCallback networkCallback = removeRequestForFeature(netCap);
- if (networkCallback != null) {
+ if (removeRequestForFeature(netCap)) {
Log.d(TAG, "stopUsingNetworkFeature for " + networkType + ", " + feature);
- unregisterNetworkCallback(networkCallback);
}
return 1;
}
@@ -1103,6 +1101,14 @@ public class ConnectivityManager {
int expireSequenceNumber;
Network currentNetwork;
int delay = -1;
+
+ private void clearDnsBinding() {
+ if (currentNetwork != null) {
+ currentNetwork = null;
+ setProcessDefaultNetworkForHostResolution(null);
+ }
+ }
+
NetworkCallback networkCallback = new NetworkCallback() {
@Override
public void onAvailable(Network network) {
@@ -1112,10 +1118,7 @@ public class ConnectivityManager {
}
@Override
public void onLost(Network network) {
- if (network.equals(currentNetwork)) {
- currentNetwork = null;
- setProcessDefaultNetworkForHostResolution(null);
- }
+ if (network.equals(currentNetwork)) clearDnsBinding();
Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
}
};
@@ -1144,10 +1147,7 @@ public class ConnectivityManager {
LegacyRequest l = sLegacyRequests.get(netCap);
if (l == null) return;
ourSeqNum = l.expireSequenceNumber;
- if (l.expireSequenceNumber == sequenceNum) {
- unregisterNetworkCallback(l.networkCallback);
- sLegacyRequests.remove(netCap);
- }
+ if (l.expireSequenceNumber == sequenceNum) removeRequestForFeature(netCap);
}
Log.d(TAG, "expireRequest with " + ourSeqNum + ", " + sequenceNum);
}
@@ -1178,12 +1178,15 @@ public class ConnectivityManager {
}
}
- private NetworkCallback removeRequestForFeature(NetworkCapabilities netCap) {
+ private boolean removeRequestForFeature(NetworkCapabilities netCap) {
+ final LegacyRequest l;
synchronized (sLegacyRequests) {
- LegacyRequest l = sLegacyRequests.remove(netCap);
- if (l == null) return null;
- return l.networkCallback;
+ l = sLegacyRequests.remove(netCap);
}
+ if (l == null) return false;
+ unregisterNetworkCallback(l.networkCallback);
+ l.clearDnsBinding();
+ return true;
}
/**