diff options
author | Jakub Pawlowski <jpawlowski@google.com> | 2016-09-01 12:04:07 -0700 |
---|---|---|
committer | Jakub Pawlowski <jpawlowski@google.com> | 2016-09-02 00:16:49 -0700 |
commit | b0ef94dcec73d7e4840880e8421519b07dff2b8d (patch) | |
tree | 02093adf075b854114c0c87222ff9bf517bd0636 /src | |
parent | 660208ad2ee2ea394adab0d1c1cea9b068bb70c6 (diff) | |
download | android_packages_apps_Bluetooth-b0ef94dcec73d7e4840880e8421519b07dff2b8d.tar.gz android_packages_apps_Bluetooth-b0ef94dcec73d7e4840880e8421519b07dff2b8d.tar.bz2 android_packages_apps_Bluetooth-b0ef94dcec73d7e4840880e8421519b07dff2b8d.zip |
Fix ConcurrentModificationException in GattService.onScanResult
If a scan client is added or removed while iterating over
mRegularScanClients, a concurrent modification exception will be thrown,
because we use a regular hash map.
Use a ConcurrentHashMap instead to fix this issue.
Bug: 31122137
Change-Id: Icbd427ebbe63adc6b5bd4ee950ef3a874ce6067b
(cherry picked from commit 92d52b44ac480a23f98749c3a2884a5b3a23ff32)
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/bluetooth/gatt/ScanManager.java | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/com/android/bluetooth/gatt/ScanManager.java b/src/com/android/bluetooth/gatt/ScanManager.java index d93e838cb..0db565c78 100644 --- a/src/com/android/bluetooth/gatt/ScanManager.java +++ b/src/com/android/bluetooth/gatt/ScanManager.java @@ -40,11 +40,13 @@ import com.android.bluetooth.btservice.AdapterService; import com.android.internal.app.IBatteryStats; import java.util.ArrayDeque; +import java.util.Collections; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -95,8 +97,8 @@ public class ScanManager { private CountDownLatch mLatch; ScanManager(GattService service) { - mRegularScanClients = new HashSet<ScanClient>(); - mBatchClients = new HashSet<ScanClient>(); + mRegularScanClients = Collections.newSetFromMap(new ConcurrentHashMap<ScanClient, Boolean>()); + mBatchClients = Collections.newSetFromMap(new ConcurrentHashMap<ScanClient, Boolean>()); mService = service; mScanNative = new ScanNative(); curUsedTrackableAdvertisements = 0; |