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

Commit 9ff4e56e authored by Andre Eisenbach's avatar Andre Eisenbach Committed by android-build-merger
Browse files

Merge "Fix race condition when doing GATT discovery"

am: 82e316ef

* commit '82e316ef':
  Fix race condition when doing GATT discovery
parents 96cc3965 82e316ef
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -2138,7 +2138,20 @@ public class GattService extends ProfileService {
    }

    private void continueSearch(int connId, int status) throws RemoteException {
        if (status == 0 && !mSearchQueue.isEmpty()) {

        // Search is complete when there was error, or nothing more to process
        if (status != 0 || mSearchQueue.isEmptyFor(connId)) {
            // In case we complete because of error, clean up
            // any remaining operations for this connection.
            mSearchQueue.removeConnId(connId);

            ClientMap.App app = mClientMap.getByConnId(connId);
            if (app != null) {
                app.callback.onSearchComplete(mClientMap.addressByConnId(connId), status);
            }
        }

        if (!mSearchQueue.isEmpty()) {
            SearchQueue.Entry svc = mSearchQueue.pop();

            if (svc.charUuidLsb == 0) {
@@ -2151,11 +2164,6 @@ public class GattService extends ProfileService {
                    svc.srvcInstId, svc.srvcUuidLsb, svc.srvcUuidMsb,
                    svc.charInstId, svc.charUuidLsb, svc.charUuidMsb, 0, 0, 0);
            }
        } else {
            ClientMap.App app = mClientMap.getByConnId(connId);
            if (app != null) {
                app.callback.onSearchComplete(mClientMap.addressByConnId(connId), status);
            }
        }
    }

+10 −0
Original line number Diff line number Diff line
@@ -86,6 +86,16 @@ import java.util.List;
        return mEntries.isEmpty();
    }

    boolean isEmptyFor(int connId) {
        for (Iterator<Entry> it = mEntries.iterator(); it.hasNext();) {
            Entry entry = it.next();
            if (entry.connId == connId) {
                return false;
            }
        }
        return true;
    }

    void clear() {
        mEntries.clear();
    }