From d35167adcaa40cb54df8e392379dfdfe98bcdba2 Mon Sep 17 00:00:00 2001 From: Sungki Kim Date: Thu, 19 May 2016 10:18:07 -0700 Subject: [PATCH] Fix GATT autoConnect race condition As pointed out here: https://code.google.com/p/android/issues/detail?id=69834 registerApp() causes onClientRegistered() to happen before autoConnect is set. This patch fixes that. Bug: 28861330 Change-Id: Ie1174c0f224f5084178439420b383164d22d542c --- core/java/android/bluetooth/BluetoothGatt.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java index b8a40dc6895a7..800dd434a969a 100644 --- a/core/java/android/bluetooth/BluetoothGatt.java +++ b/core/java/android/bluetooth/BluetoothGatt.java @@ -645,6 +645,9 @@ public final class BluetoothGatt implements BluetoothProfile { } mConnState = CONN_STATE_CONNECTING; } + + mAutoConnect = autoConnect; + if (!registerApp(callback)) { synchronized(mStateLock) { mConnState = CONN_STATE_IDLE; @@ -653,8 +656,7 @@ public final class BluetoothGatt implements BluetoothProfile { return false; } - // the connection will continue after successful callback registration - mAutoConnect = autoConnect; + // The connection will continue in the onClientRegistered callback return true; }