diff options
| author | 2019-04-08 17:14:35 +0900 | |
|---|---|---|
| committer | 2019-04-08 21:14:23 +0900 | |
| commit | e35374386bdb473f0e6733ae15d90214ce402698 (patch) | |
| tree | ffb7c862b4b032aed7950db410f0024a449df7aa | |
| parent | 43b75cad9eed2d8d12375316a51ed31b3af01400 (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.java | 9 |
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(); } } |