diff options
author | William Escande <wescande@google.com> | 2022-04-14 06:16:35 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-14 06:16:35 +0000 |
commit | 0b730f053b64cc04fa20cc03f74c568f94174802 (patch) | |
tree | 55bfa54923f1aeb863404ef26f4e1076adacd46d /framework/java/android/bluetooth/BluetoothAdapter.java | |
parent | ac81253aa8bfb31c607d09b6f7b13ba7207fa912 (diff) | |
parent | f836ba2d0cc932c5ddadb5158184174416e886bb (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.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 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(); } } |