From 6149d266910d96ec0395bdb12038baa80dfe3a3d Mon Sep 17 00:00:00 2001 From: "ellen,yang" Date: Thu, 17 Aug 2023 17:22:04 +0800 Subject: modify the concurrentmodificationexception in the senfers in CrossprofileSenders.java Test:CtsDevicePolicyTestCases Bug:292471207 (cherry picked from https://android-review.googlesource.com/q/commit:2067f2a64659376c0f5d125ec5e2dea033ac1c57) Merged-In: I52ebfa22d61ba8fdf2af481d034a07d37429dd43 Change-Id: I52ebfa22d61ba8fdf2af481d034a07d37429dd43 --- .../android/enterprise/connectedapps/CrossProfileSender.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sdk/src/main/java/com/google/android/enterprise/connectedapps/CrossProfileSender.java b/sdk/src/main/java/com/google/android/enterprise/connectedapps/CrossProfileSender.java index 0432696..91aaadc 100644 --- a/sdk/src/main/java/com/google/android/enterprise/connectedapps/CrossProfileSender.java +++ b/sdk/src/main/java/com/google/android/enterprise/connectedapps/CrossProfileSender.java @@ -49,11 +49,13 @@ import com.google.android.enterprise.connectedapps.internal.CrossProfileBundleCa import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.WeakHashMap; +import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.CountDownLatch; @@ -283,13 +285,15 @@ public final class CrossProfileSender { // This is synchronized which isn't massively performant but it only gets accessed once straight // after creating a Sender, and once each time availability changes private static final Set senders = - synchronizedSet(newSetFromMap(new WeakHashMap<>())); + synchronizedSet(newSetFromMap(new WeakHashMap<>())); private static final BroadcastReceiver profileAvailabilityReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - for (CrossProfileSender sender : senders) { - sender.scheduledExecutorService.execute(sender::checkAvailability); + synchronized (senders) { + for (CrossProfileSender sender : senders) { + sender.scheduledExecutorService.execute(sender::checkAvailability); + } } } }; -- cgit v1.2.3