diff options
author | Deyao Ren <deyaoren@google.com> | 2022-05-03 23:29:46 +0000 |
---|---|---|
committer | Deyao Ren <deyaoren@google.com> | 2022-05-03 23:33:19 +0000 |
commit | 2d9eaa806821919ec1f3f55baedb88e82ca0a12b (patch) | |
tree | 2323ec54fcf89bf89b5f5f670c90133c5f003482 /framework/java/android/bluetooth/BluetoothAdapter.java | |
parent | 7bfc506455680e86f4fb8003213079e39ca6dbf6 (diff) | |
parent | 0c1d7662222ae22d35c750a3ba3ed88ce1eaf5aa (diff) |
Merge TP1A.220422.001
Change-Id: I413ca31daa6902265a5a4fd83b646b3f049e5fd5
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothAdapter.java')
-rw-r--r-- | framework/java/android/bluetooth/BluetoothAdapter.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/framework/java/android/bluetooth/BluetoothAdapter.java b/framework/java/android/bluetooth/BluetoothAdapter.java index d372a935e7..509af74297 100644 --- a/framework/java/android/bluetooth/BluetoothAdapter.java +++ b/framework/java/android/bluetooth/BluetoothAdapter.java @@ -84,6 +84,7 @@ import java.util.UUID; import java.util.WeakHashMap; import java.util.concurrent.Executor; import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.lang.reflect.Method; import java.lang.reflect.Constructor; @@ -992,8 +993,12 @@ public final class BluetoothAdapter { BluetoothAdapter(IBluetoothManager managerService, AttributionSource attributionSource) { mManagerService = Objects.requireNonNull(managerService); mAttributionSource = Objects.requireNonNull(attributionSource); - synchronized (mServiceLock.writeLock()) { + Lock l = mServiceLock.writeLock(); + l.lock(); + try { mService = getBluetoothService(mManagerCallback); + } finally { + l.unlock(); } mLeScanClients = new HashMap<LeScanCallback, ScanCallback>(); mToken = new Binder(DESCRIPTOR); @@ -4041,8 +4046,12 @@ public final class BluetoothAdapter { private final IBluetoothManagerCallback mManagerCallback = new IBluetoothManagerCallback.Stub() { public void onBluetoothServiceUp(IBluetooth bluetoothService) { - synchronized (mServiceLock.writeLock()) { + Lock l = mServiceLock.writeLock(); + l.lock(); + try { mService = bluetoothService; + } finally { + l.unlock(); } synchronized (mMetadataListeners) { mMetadataListeners.forEach((device, pair) -> { @@ -4078,7 +4087,9 @@ public final class BluetoothAdapter { } public void onBluetoothServiceDown() { - synchronized (mServiceLock.writeLock()) { + Lock l = mServiceLock.writeLock(); + l.lock(); + try { mService = null; if (mLeScanClients != null) { mLeScanClients.clear(); @@ -4089,6 +4100,8 @@ public final class BluetoothAdapter { if (mBluetoothLeScanner != null) { mBluetoothLeScanner.cleanup(); } + } finally { + l.unlock(); } Log.d(TAG, "onBluetoothServiceDown: Finished sending callbacks to registered clients"); } |