Merge "Initialize serviceCache before first use" into main am: 1e2aa90e38

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2942990

Change-Id: I7850edefd048d130840b730d821358e9f83bd75b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java
index 508807e..1d6039c 100644
--- a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java
+++ b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java
@@ -55,7 +55,8 @@
     @NonNull private final DiscoveryExecutor discoveryExecutor;
     @NonNull private final MdnsFeatureFlags mdnsFeatureFlags;
 
-    // Only accessed on the handler thread, set to non-null right after initializing the handler
+    // Only accessed on the handler thread, initialized before first use
+    @Nullable
     private MdnsServiceCache serviceCache;
 
     private static class PerSocketServiceTypeClients {
@@ -129,11 +130,6 @@
         this.perSocketServiceTypeClients = new PerSocketServiceTypeClients();
         this.mdnsFeatureFlags = mdnsFeatureFlags;
         this.discoveryExecutor = new DiscoveryExecutor(socketClient.getLooper());
-
-        // The very first posted task is to initialize the service cache, so it will be always
-        // set in other tasks running on the handler
-        discoveryExecutor.execute(() ->
-                serviceCache = new MdnsServiceCache(Looper.myLooper(), mdnsFeatureFlags));
     }
 
     private static class DiscoveryExecutor implements Executor {
@@ -358,9 +354,13 @@
         sharedLog.log("createServiceTypeClient for type:" + serviceType + " " + socketKey);
         final String tag = serviceType + "-" + socketKey.getNetwork()
                 + "/" + socketKey.getInterfaceIndex();
+        final Looper looper = Looper.myLooper();
+        if (serviceCache == null) {
+            serviceCache = new MdnsServiceCache(looper, mdnsFeatureFlags);
+        }
         return new MdnsServiceTypeClient(
                 serviceType, socketClient,
                 executorProvider.newServiceTypeClientSchedulerExecutor(), socketKey,
-                sharedLog.forSubComponent(tag), Looper.myLooper(), serviceCache);
+                sharedLog.forSubComponent(tag), looper, serviceCache);
     }
 }
\ No newline at end of file