summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJakub Pawlowski <jpawlowski@google.com>2016-09-01 12:04:07 -0700
committerJakub Pawlowski <jpawlowski@google.com>2016-09-02 00:16:49 -0700
commitb0ef94dcec73d7e4840880e8421519b07dff2b8d (patch)
tree02093adf075b854114c0c87222ff9bf517bd0636 /src
parent660208ad2ee2ea394adab0d1c1cea9b068bb70c6 (diff)
downloadandroid_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.java6
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;