Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ff11995 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Prevent ConcurrentModificationException on HandleMap" am: e725c9b2 am: 388637ae

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/1989866

Change-Id: I960155cadce4fb807c57599be7aa0b830130a620
parents 3b5b7e67 388637ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3444,7 +3444,7 @@ public class GattService extends ProfileService {
            return new ArrayList<>(0);
        }
        List<ParcelUuid> serviceUuids = new ArrayList<ParcelUuid>();
        for (HandleMap.Entry entry : mHandleMap.mEntries) {
        for (HandleMap.Entry entry : mHandleMap.getEntries()) {
            serviceUuids.add(new ParcelUuid(entry.uuid));
        }
        return serviceUuids;
+6 −15
Original line number Diff line number Diff line
@@ -17,12 +17,11 @@ package com.android.bluetooth.gatt;

import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

class HandleMap {
    private static final boolean DBG = GattServiceConfig.DBG;
@@ -88,8 +87,8 @@ class HandleMap {
    int mLastCharacteristic = 0;

    HandleMap() {
        mEntries = new ArrayList<Entry>();
        mRequestMap = new HashMap<Integer, Integer>();
        mEntries = new CopyOnWriteArrayList<Entry>();
        mRequestMap = new ConcurrentHashMap<Integer, Integer>();
    }

    void clear() {
@@ -144,16 +143,8 @@ class HandleMap {
    }

    void deleteService(int serverIf, int serviceHandle) {
        for (Iterator<Entry> it = mEntries.iterator(); it.hasNext(); ) {
            Entry entry = it.next();
            if (entry.serverIf != serverIf) {
                continue;
            }

            if (entry.handle == serviceHandle || entry.serviceHandle == serviceHandle) {
                it.remove();
            }
        }
        mEntries.removeIf(entry -> ((entry.serverIf == serverIf)
                && (entry.handle == serviceHandle || entry.serviceHandle == serviceHandle)));
    }

    List<Entry> getEntries() {