am 6c93739f: am 49f74a38: Clear process DNS NetID binding when expiring or releaseing legacy requests.

* commit '6c93739f2f25c8afb77997165fa86be537df67a9':
  Clear process DNS NetID binding when expiring or releaseing legacy requests.
This commit is contained in:
Paul Jensen
2015-01-06 14:57:44 +00:00
committed by Android Git Automerger

View File

@@ -933,10 +933,8 @@ public class ConnectivityManager {
return -1; return -1;
} }
NetworkCallback networkCallback = removeRequestForFeature(netCap); if (removeRequestForFeature(netCap)) {
if (networkCallback != null) {
Log.d(TAG, "stopUsingNetworkFeature for " + networkType + ", " + feature); Log.d(TAG, "stopUsingNetworkFeature for " + networkType + ", " + feature);
unregisterNetworkCallback(networkCallback);
} }
return 1; return 1;
} }
@@ -1103,6 +1101,14 @@ public class ConnectivityManager {
int expireSequenceNumber; int expireSequenceNumber;
Network currentNetwork; Network currentNetwork;
int delay = -1; int delay = -1;
private void clearDnsBinding() {
if (currentNetwork != null) {
currentNetwork = null;
setProcessDefaultNetworkForHostResolution(null);
}
}
NetworkCallback networkCallback = new NetworkCallback() { NetworkCallback networkCallback = new NetworkCallback() {
@Override @Override
public void onAvailable(Network network) { public void onAvailable(Network network) {
@@ -1112,10 +1118,7 @@ public class ConnectivityManager {
} }
@Override @Override
public void onLost(Network network) { public void onLost(Network network) {
if (network.equals(currentNetwork)) { if (network.equals(currentNetwork)) clearDnsBinding();
currentNetwork = null;
setProcessDefaultNetworkForHostResolution(null);
}
Log.d(TAG, "startUsingNetworkFeature lost Network:" + network); Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
} }
}; };
@@ -1144,10 +1147,7 @@ public class ConnectivityManager {
LegacyRequest l = sLegacyRequests.get(netCap); LegacyRequest l = sLegacyRequests.get(netCap);
if (l == null) return; if (l == null) return;
ourSeqNum = l.expireSequenceNumber; ourSeqNum = l.expireSequenceNumber;
if (l.expireSequenceNumber == sequenceNum) { if (l.expireSequenceNumber == sequenceNum) removeRequestForFeature(netCap);
unregisterNetworkCallback(l.networkCallback);
sLegacyRequests.remove(netCap);
}
} }
Log.d(TAG, "expireRequest with " + ourSeqNum + ", " + sequenceNum); 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) { synchronized (sLegacyRequests) {
LegacyRequest l = sLegacyRequests.remove(netCap); l = sLegacyRequests.remove(netCap);
if (l == null) return null;
return l.networkCallback;
} }
if (l == null) return false;
unregisterNetworkCallback(l.networkCallback);
l.clearDnsBinding();
return true;
} }
/** /**