From 7ba4d03c1cd629206b149b2d1204b08082aedef0 Mon Sep 17 00:00:00 2001 From: Paul Jensen Date: Wed, 2 Jul 2014 12:02:59 -0400 Subject: [PATCH] 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 --- .../core/java/com/android/server/ConnectivityService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 87d28d35a2..bce2800f45 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3332,6 +3332,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { } 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;