summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothAdapter.java
diff options
context:
space:
mode:
authorWilliam Escande <wescande@google.com>2022-04-14 06:16:35 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-14 06:16:35 +0000
commit0b730f053b64cc04fa20cc03f74c568f94174802 (patch)
tree55bfa54923f1aeb863404ef26f4e1076adacd46d /framework/java/android/bluetooth/BluetoothAdapter.java
parentac81253aa8bfb31c607d09b6f7b13ba7207fa912 (diff)
parentf836ba2d0cc932c5ddadb5158184174416e886bb (diff)
Merge "Fix write lock locking mechanisme" am: c7ceab19a8 am: aa1288c9d2 am: f836ba2d0c
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2063178 Change-Id: Ib39bdd60a716eb373f2f2c59861b2cdc50682728 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 85177d3eb2..51239f1236 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;
/**
@@ -990,8 +991,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);
@@ -3834,8 +3839,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) -> {
@@ -3869,7 +3878,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();
@@ -3880,6 +3891,8 @@ public final class BluetoothAdapter {
if (mBluetoothLeScanner != null) {
mBluetoothLeScanner.cleanup();
}
+ } finally {
+ l.unlock();
}
}