From 32858e14caa09fbb3eb4081f114f2a99181c9643 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Tue, 21 Feb 2017 16:21:46 +0900 Subject: [PATCH] Don't request information on unregistered callbacks Test: as follows - build (bullhead) - flashed - booted - runtest frameworks-net passes Bug: 32163131 Bug: 35608572 Change-Id: I489e510ac131a7a624a652b12165104202a49f85 --- .../tethering/UpstreamNetworkMonitor.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java index 017c5fb4d4ecf..63024db232b6d 100644 --- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java @@ -183,11 +183,31 @@ public class UpstreamNetworkMonitor { case CALLBACK_LISTEN_ALL: break; case CALLBACK_TRACK_DEFAULT: + if (mDefaultNetworkCallback == null) { + // The callback was unregistered in the interval between + // ConnectivityService calling onAvailable() and our + // handling of it here on the mTarget.getHandler() thread. + // Clean-up of this network entry is deferred to the + // handling of onLost() by other callbacks. + // TODO: change to Log.wtf() after oag/331764 is merged. + return; + } + cm().requestNetworkCapabilities(mDefaultNetworkCallback); cm().requestLinkProperties(mDefaultNetworkCallback); mCurrentDefault = network; break; case CALLBACK_MOBILE_REQUEST: + if (mMobileNetworkCallback == null) { + // The callback was unregistered in the interval between + // ConnectivityService calling onAvailable() and our + // handling of it here on the mTarget.getHandler() thread. + // Clean-up of this network entry is deferred to the + // handling of onLost() by other callbacks. + // TODO: change to Log.wtf() after oag/331764 is merged. + return; + } + cm().requestNetworkCapabilities(mMobileNetworkCallback); cm().requestLinkProperties(mMobileNetworkCallback); break;