When adding a NetworkRequest, cancel linger for satisfying Network.
This fixes a problem where a requested network can later suddenly disappear if
it was lingering when the request arrived and later the linger timeout expired.
bug:15927234
Change-Id: Ib3fae45820ce4421e3bc5b623937a16d5f1efa0f
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 87d28d3..bce2800 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3332,6 +3332,12 @@
}
if (bestNetwork != null) {
if (VDBG) log("using " + bestNetwork.name());
+ if (nri.isRequest && bestNetwork.networkInfo.isConnected()) {
+ // Cancel any lingering so the linger timeout doesn't teardown this network
+ // even though we have a request for it.
+ bestNetwork.networkLingered.clear();
+ bestNetwork.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_CONNECTED);
+ }
bestNetwork.addRequest(nri.request);
mNetworkForRequestId.put(nri.request.requestId, bestNetwork);
int legacyType = nri.request.legacyType;