diff options
| -rw-r--r-- | core/java/android/net/ConnectivityManager.java | 33 |
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; } /** |