Don't process dup unwanted() when unregistering NetworkAgent

In cases where the NetworkAgent is unregistered (eg. Safe mode), but the
VCN is not shut down, the NetworkAgent.unwanted() call should not
trigger a teardown.

Test: atest FrameworksVcnTests
Change-Id: Icf32cb464bce2aae2846448d5a6a53a97f558398
This commit is contained in:
Benedict Wong
2021-04-05 15:01:13 -07:00
parent f78c3512df
commit 0906d6bc1b
2 changed files with 10 additions and 1 deletions

View File

@@ -1474,7 +1474,13 @@ public class VcnGatewayConnection extends StateMachine {
mVcnContext.getVcnNetworkProvider(),
() -> {
Slog.d(TAG, "NetworkAgent was unwanted");
teardownAsynchronously();
// If network agent has already been torn down, skip sending the
// disconnect. Unwanted() is always called, even when networkAgents
// are unregistered in teardownNetwork(), so prevent duplicate
// notifications.
if (mNetworkAgent != null) {
teardownAsynchronously();
}
} /* networkUnwantedCallback */,
(status) -> {
if (status == NetworkAgent.VALIDATION_STATUS_VALID) {

View File

@@ -312,6 +312,9 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
verifySafeModeTimeoutNotifiesCallbackAndUnregistersNetworkAgent(
mGatewayConnection.mConnectedState);
assertTrue(mGatewayConnection.isInSafeMode());
assertFalse(mGatewayConnection.isQuitting());
triggerChildOpened();
mTestLooper.dispatchAll();