Fix VPN retry timer mechanism
This commit does:
- Skip the new retrying request when there is a pending retrying
task. Otherwise, the mRetryCount will be increased unexpectedly
before the current retrying task finishes its job.
- onChildOpened will call onSessionLost when MTU is invalid, and
onChildOpened will be called after onIkeOpened, so if
mRetryCount is reset in onIkeOpened, the mRetryCount will always
start from 0.
Bug: 256776571
Test: atest FrameworksNetTests:VpnTest
Manual test and check the log.
Change-Id: I396a3c279dc909f78c400cff1c31d77fe98cd7a6
This commit is contained in:
@@ -2881,7 +2881,6 @@ public class Vpn {
|
||||
ikeConfiguration.isIkeExtensionEnabled(
|
||||
IkeSessionConfiguration.EXTENSION_TYPE_MOBIKE);
|
||||
onIkeConnectionInfoChanged(token, ikeConfiguration.getIkeSessionConnectionInfo());
|
||||
mRetryCount = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2989,6 +2988,7 @@ public class Vpn {
|
||||
}
|
||||
|
||||
doSendLinkProperties(networkAgent, lp);
|
||||
mRetryCount = 0;
|
||||
} catch (Exception e) {
|
||||
Log.d(TAG, "Error in ChildOpened for token " + token, e);
|
||||
onSessionLost(token, e);
|
||||
@@ -3208,6 +3208,10 @@ public class Vpn {
|
||||
}
|
||||
|
||||
private void scheduleRetryNewIkeSession() {
|
||||
if (mScheduledHandleRetryIkeSessionFuture != null) {
|
||||
Log.d(TAG, "There is a pending retrying task, skip the new retrying task");
|
||||
return;
|
||||
}
|
||||
final long retryDelay = mDeps.getNextRetryDelaySeconds(mRetryCount++);
|
||||
Log.d(TAG, "Retry new IKE session after " + retryDelay + " seconds.");
|
||||
// If the default network is lost during the retry delay, the mActiveNetwork will be
|
||||
|
||||
Reference in New Issue
Block a user