summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChiachang Wang <chiachangwang@google.com>2019-10-23 21:23:36 +0800
committerChiachang Wang <chiachangwang@google.com>2019-10-23 21:25:03 +0800
commited5f519883cd4257881ca8f46961e8d4189feed8 (patch)
tree1dfb10b345581fca32b443b43f5c12dac98e29f1 /src
parent8714a70f652664b3b1540568f3f269deddda678e (diff)
Keep only one CMD_EVALUATE_PRIVATE_DNS in the queue
If a user changes the private DNS setting while NetworkMonitor are in EvaluatingPrivateDnsState, new failure caused by recongiguration will put into the message queue. State machine will get multiple CMD_EVALUATE_PRIVATE_DNS events with different delay timer which may not work as expected. Test: atest NetworkStackTests:\ com.android.server.connectivity.NetworkMonitorTest Bug: 139797781 Change-Id: I7f4e5642b9734daddfefc9c5ef25890aa8d3d64b
Diffstat (limited to 'src')
-rw-r--r--src/com/android/server/connectivity/NetworkMonitor.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index 7cabb1e..e08170a 100644
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -681,6 +681,8 @@ public class NetworkMonitor extends StateMachine {
// no resolved IP addresses, IPs unreachable,
// port 853 unreachable, port 853 is not running a
// DNS-over-TLS server, et cetera).
+ // Cancel any outstanding CMD_EVALUATE_PRIVATE_DNS.
+ removeMessages(CMD_EVALUATE_PRIVATE_DNS);
sendMessage(CMD_EVALUATE_PRIVATE_DNS);
break;
}
@@ -1042,6 +1044,11 @@ public class NetworkMonitor extends StateMachine {
// All good!
transitionTo(mValidatedState);
break;
+ case CMD_PRIVATE_DNS_SETTINGS_CHANGED:
+ // When settings change the reevaluation timer must be reset.
+ mPrivateDnsReevalDelayMs = INITIAL_REEVALUATE_DELAY_MS;
+ // Let the message bubble up and be handled by parent states as usual.
+ return NOT_HANDLED;
default:
return NOT_HANDLED;
}
@@ -1094,10 +1101,6 @@ public class NetworkMonitor extends StateMachine {
// transitioning back to EvaluatingState, to perhaps give ourselves
// the opportunity to (re)detect a captive portal or something.
//
- // TODO: distinguish between CMD_EVALUATE_PRIVATE_DNS messages that are caused by server
- // lookup failures (which should continue to do exponential backoff) and
- // CMD_EVALUATE_PRIVATE_DNS messages that are caused by user reconfiguration (which
- // should be processed immediately.
sendMessageDelayed(CMD_EVALUATE_PRIVATE_DNS, mPrivateDnsReevalDelayMs);
mPrivateDnsReevalDelayMs *= 2;
if (mPrivateDnsReevalDelayMs > MAX_REEVALUATE_DELAY_MS) {