diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 53b1eb24bb..97a57f9e6c 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -407,6 +407,7 @@ import java.util.Set; import java.util.SortedSet; import java.util.StringJoiner; import java.util.TreeSet; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiConsumer; @@ -8933,9 +8934,15 @@ public class ConnectivityService extends IConnectivityManager.Stub @NonNull final NetworkRequestInfo mDefaultRequest; // Collection of NetworkRequestInfo's used for default networks. + // This set is read and iterated on multiple threads. + // Using CopyOnWriteArraySet since number of default network request is small (system default + // network request + per-app default network requests) and updated infrequently but read + // frequently. @VisibleForTesting @NonNull - final ArraySet mDefaultNetworkRequests = new ArraySet<>(); + final CopyOnWriteArraySet mDefaultNetworkRequests = + new CopyOnWriteArraySet<>(); + private boolean isPerAppDefaultRequest(@NonNull final NetworkRequestInfo nri) { return (mDefaultNetworkRequests.contains(nri) && mDefaultRequest != nri);