From ae70143d7940e67b479954a12516b54e99296fac Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Sun, 3 Nov 2019 00:02:41 +0900 Subject: Always expire servers when receiving a zero-lifetime RDNSS option When receiving a zero-lifetime RDNSS option for DNS servers that is already configured, the code first sets the lifetime of the servers to zero, and then runs code that prunes expired servers. Because expired servers are pruned only if "expiry < now", if the pruning happens in the same millisecond as the update, the servers aren't actually pruned. This can happen multiple times, so if the code runs fast enough, the server will never expire. Fix this by using <= instead of <. Fix: 143806550 Test: makes the new IpClientIntegrationTest#testRaRdnss not flaky Change-Id: Icf6893efdc028859b178eb234f6f1a42b24e2936 --- src/android/net/ip/IpClientLinkObserver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/android/net/ip/IpClientLinkObserver.java') diff --git a/src/android/net/ip/IpClientLinkObserver.java b/src/android/net/ip/IpClientLinkObserver.java index 8ad99aa..3f399e9 100644 --- a/src/android/net/ip/IpClientLinkObserver.java +++ b/src/android/net/ip/IpClientLinkObserver.java @@ -326,7 +326,7 @@ public class IpClientLinkObserver implements NetworkObserver { // Prune excess or expired entries. for (int i = mAllServers.size() - 1; i >= 0; i--) { - if (i >= NUM_SERVERS || mAllServers.get(i).expiry < now) { + if (i >= NUM_SERVERS || mAllServers.get(i).expiry <= now) { DnsServerEntry removed = mAllServers.remove(i); mIndex.remove(removed.address); changed |= mCurrentServers.remove(removed.address); -- cgit v1.2.3