From c431def111f22952fe43aa04d48439c6432d50b6 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Mon, 11 Mar 2024 14:04:18 -0700 Subject: Clear dns cache when restoring network access Sometimes apps need to wait for network rules to be updated before some of their lifecycle events can be dispatched. This happens specifically before resuming activities today. Because the process-level InetAddress library can cache dns failures, we need to clear its cache so that the app can resume making valid dns queries as soon as any of its activities resume. Test: Manual Bug: 237556596 Change-Id: Ia99a43731801078ec8d67cf17fbfee9c329b6e96 --- core/java/android/app/ActivityThread.java | 7 +++++++ core/java/android/app/network-policy.aconfig | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 core/java/android/app/network-policy.aconfig diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1d39186de183..8de0a8321696 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4073,6 +4073,13 @@ public final class ActivityThread extends ClientTransactionHandler ActivityManager.getService().waitForNetworkStateUpdate(mNetworkBlockSeq); mNetworkBlockSeq = INVALID_PROC_STATE_SEQ; } catch (RemoteException ignored) {} + if (Flags.clearDnsCacheOnNetworkRulesUpdate()) { + // InetAddress will cache UnknownHostException failures. If the rules got + // updated and the app has network access now, we need to clear the negative + // cache to ensure valid dns queries can work immediately. + // TODO: b/329133769 - Clear only the negative cache once it is available. + InetAddress.clearDnsCache(); + } } } } diff --git a/core/java/android/app/network-policy.aconfig b/core/java/android/app/network-policy.aconfig new file mode 100644 index 000000000000..88f386f6025d --- /dev/null +++ b/core/java/android/app/network-policy.aconfig @@ -0,0 +1,11 @@ +package: "android.app" + +flag { + namespace: "backstage_power" + name: "clear_dns_cache_on_network_rules_update" + description: "Clears the DNS cache when the network rules update" + bug: "237556596" + metadata { + purpose: PURPOSE_BUGFIX + } +} \ No newline at end of file -- cgit v1.2.3-59-g8ed1b