summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothAdapter.java
diff options
context:
space:
mode:
authorDeyao Ren <deyaoren@google.com>2022-05-03 23:29:46 +0000
committerDeyao Ren <deyaoren@google.com>2022-05-03 23:33:19 +0000
commit2d9eaa806821919ec1f3f55baedb88e82ca0a12b (patch)
tree2323ec54fcf89bf89b5f5f670c90133c5f003482 /framework/java/android/bluetooth/BluetoothAdapter.java
parent7bfc506455680e86f4fb8003213079e39ca6dbf6 (diff)
parent0c1d7662222ae22d35c750a3ba3ed88ce1eaf5aa (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.java19
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");
}