summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lorenzo Colitti <lorenzo@google.com> 2019-04-08 17:14:35 +0900
committer Lorenzo Colitti <lorenzo@google.com> 2019-04-08 21:14:23 +0900
commite35374386bdb473f0e6733ae15d90214ce402698 (patch)
treeffb7c862b4b032aed7950db410f0024a449df7aa
parent43b75cad9eed2d8d12375316a51ed31b3af01400 (diff)
Don't leak captive portal broadcast receivers.
Since aosp/937885, mLaunchCaptivePortalAppBroadcastReceiver is nulled out, but not unregistered, when exiting MaybeNotifyState. This causes the BroadcastReceiver to be leaked because it is no longer unregistered when processing CMD_NETWORK_DISCONNECTED. Fix this by unregistering the receiver in MaybeNotifyState#exit. Also remove the unregister call in CMD_NETWORK_DISCONNECTED: it is no longer necessary, because StateMachine, before quitting, will call the exit method of the current state and all its parent states. Bug: 122164725 Test: atest FrameworksNetTests NetworkStackTests Change-Id: I447b3cfd3821dda19482ed962dd59ec61fc5fc9b
-rw-r--r--packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java9
1 files changed, 4 insertions, 5 deletions
diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
index 8f7d98876e4c..8fbbccb8178f 100644
--- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
@@ -542,10 +542,6 @@ public class NetworkMonitor extends StateMachine {
return HANDLED;
case CMD_NETWORK_DISCONNECTED:
logNetworkEvent(NetworkEvent.NETWORK_DISCONNECTED);
- if (mLaunchCaptivePortalAppBroadcastReceiver != null) {
- mContext.unregisterReceiver(mLaunchCaptivePortalAppBroadcastReceiver);
- mLaunchCaptivePortalAppBroadcastReceiver = null;
- }
quit();
return HANDLED;
case CMD_FORCE_REEVALUATION:
@@ -779,7 +775,10 @@ public class NetworkMonitor extends StateMachine {
@Override
public void exit() {
- mLaunchCaptivePortalAppBroadcastReceiver = null;
+ if (mLaunchCaptivePortalAppBroadcastReceiver != null) {
+ mContext.unregisterReceiver(mLaunchCaptivePortalAppBroadcastReceiver);
+ mLaunchCaptivePortalAppBroadcastReceiver = null;
+ }
hideProvisioningNotification();
}
}