From 5c5f6ad27a96d7ec63dd153450313bde553c6ad1 Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Mon, 6 Jul 2020 15:03:43 -0400 Subject: [PATCH] Fix ConcurrentModificationException The code that keeps track of registered BroadcastReceiver in tests was being accesses by multiple threads. Guard against that. Bug: 160433244 Test: SystemUITests Change-Id: Ia89e638919d65955ae2182639fd74bcbab771fcc --- .../systemui/SysuiTestableContext.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java index f29f04244901a..3d679deaa4260 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java @@ -26,11 +26,14 @@ import android.util.ArraySet; import android.util.Log; import android.view.Display; +import com.android.internal.annotations.GuardedBy; + import java.util.Set; public class SysuiTestableContext extends TestableContext { - private Set mRegisteredReceivers = new ArraySet<>(); + @GuardedBy("mRegisteredReceivers") + private final Set mRegisteredReceivers = new ArraySet<>(); public SysuiTestableContext(Context base) { super(base); @@ -54,7 +57,11 @@ public class SysuiTestableContext extends TestableContext { } public void cleanUpReceivers(String testName) { - Set copy = new ArraySet<>(mRegisteredReceivers); + Set copy; + synchronized (mRegisteredReceivers) { + copy = new ArraySet<>(mRegisteredReceivers); + mRegisteredReceivers.clear(); + } for (BroadcastReceiver r : copy) { try { unregisterReceiver(r); @@ -68,7 +75,9 @@ public class SysuiTestableContext extends TestableContext { @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { if (receiver != null) { - mRegisteredReceivers.add(receiver); + synchronized (mRegisteredReceivers) { + mRegisteredReceivers.add(receiver); + } } return super.registerReceiver(receiver, filter); } @@ -77,7 +86,9 @@ public class SysuiTestableContext extends TestableContext { public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) { if (receiver != null) { - mRegisteredReceivers.add(receiver); + synchronized (mRegisteredReceivers) { + mRegisteredReceivers.add(receiver); + } } return super.registerReceiver(receiver, filter, broadcastPermission, scheduler); } @@ -86,7 +97,9 @@ public class SysuiTestableContext extends TestableContext { public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, String broadcastPermission, Handler scheduler) { if (receiver != null) { - mRegisteredReceivers.add(receiver); + synchronized (mRegisteredReceivers) { + mRegisteredReceivers.add(receiver); + } } return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler); } @@ -94,7 +107,9 @@ public class SysuiTestableContext extends TestableContext { @Override public void unregisterReceiver(BroadcastReceiver receiver) { if (receiver != null) { - mRegisteredReceivers.remove(receiver); + synchronized (mRegisteredReceivers) { + mRegisteredReceivers.remove(receiver); + } } super.unregisterReceiver(receiver); }