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
Merged-In: I1db24fe05ada8b3a37a9a60aa568b6153bf51ad8
(cherry picked from commit 3a1c0ad3ee)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user