Merge "Destroy networks as soon as they are disconnected." into pi-dev

am: d88abbfd78

Change-Id: I0617f0ff6e46a1d3764335a1e7ad01b34c8cc5a8
This commit is contained in:
Chalard Jean
2018-05-24 13:35:45 -07:00
committed by android-build-merger

View File

@@ -2442,9 +2442,23 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
} }
// This is a no-op if it's called with a message designating a network that has
// already been destroyed, because its reference will not be found in the relevant
// maps.
private void handleAsyncChannelDisconnected(Message msg) { private void handleAsyncChannelDisconnected(Message msg) {
NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
if (nai != null) { if (nai != null) {
disconnectAndDestroyNetwork(nai);
} else {
NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(msg.replyTo);
if (DBG && nfi != null) log("unregisterNetworkFactory for " + nfi.name);
}
}
// Destroys a network, remove references to it from the internal state managed by
// ConnectivityService, free its interfaces and clean up.
// Must be called on the Handler thread.
private void disconnectAndDestroyNetwork(NetworkAgentInfo nai) {
if (DBG) { if (DBG) {
log(nai.name() + " got DISCONNECTED, was satisfying " + nai.numNetworkRequests()); log(nai.name() + " got DISCONNECTED, was satisfying " + nai.numNetworkRequests());
} }
@@ -2480,7 +2494,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
wakeupModifyInterface(iface, nai.networkCapabilities, false); wakeupModifyInterface(iface, nai.networkCapabilities, false);
} }
nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED); nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED);
mNetworkAgentInfos.remove(msg.replyTo); mNetworkAgentInfos.remove(nai.messenger);
nai.maybeStopClat(); nai.maybeStopClat();
synchronized (mNetworkForNetId) { synchronized (mNetworkForNetId) {
// Remove the NetworkAgent, but don't mark the netId as // Remove the NetworkAgent, but don't mark the netId as
@@ -2527,10 +2541,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
synchronized (mNetworkForNetId) { synchronized (mNetworkForNetId) {
mNetIdInUse.delete(nai.network.netId); mNetIdInUse.delete(nai.network.netId);
} }
} else {
NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(msg.replyTo);
if (DBG && nfi != null) log("unregisterNetworkFactory for " + nfi.name);
}
} }
// If this method proves to be too slow then we can maintain a separate // If this method proves to be too slow then we can maintain a separate
@@ -5621,6 +5631,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
updateUids(networkAgent, networkAgent.networkCapabilities, null); updateUids(networkAgent, networkAgent.networkCapabilities, null);
} }
disconnectAndDestroyNetwork(networkAgent);
} else if ((oldInfo != null && oldInfo.getState() == NetworkInfo.State.SUSPENDED) || } else if ((oldInfo != null && oldInfo.getState() == NetworkInfo.State.SUSPENDED) ||
state == NetworkInfo.State.SUSPENDED) { state == NetworkInfo.State.SUSPENDED) {
// going into or coming out of SUSPEND: rescore and notify // going into or coming out of SUSPEND: rescore and notify