While turning OFF do not honor ON requests.
Native stack does not handle being put from OFF -> ON state without doing a complete cleanup. Hence instead of going from start -> ON -> OFF -> cleanup it goes start -> ON -> OFF ->ON -> ... usually leads to race conditions down the road in native. This patch is a workaround so that we can throw away the requests if we are in currently "turning off" phase. The side-effect would be that user will need to turn it ON again. The race happens when the turn OFF time is longer but usually it is found to be close to order of seconds hence the wait should be bounded. Bug: b/28318203 Change-Id: I14f6633f31311e5b561e1dcbc8a9d6d2a5dd6fdc
This commit is contained in:
committed by
Andre Eisenbach
parent
44b9f13f9c
commit
090bf55130
@@ -208,7 +208,7 @@ public final class LocalBluetoothAdapter {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setBluetoothEnabled(boolean enabled) {
|
||||
public boolean setBluetoothEnabled(boolean enabled) {
|
||||
boolean success = enabled
|
||||
? mAdapter.enable()
|
||||
: mAdapter.disable();
|
||||
@@ -225,6 +225,7 @@ public final class LocalBluetoothAdapter {
|
||||
|
||||
syncBluetoothState();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
public BluetoothDevice getRemoteDevice(String address) {
|
||||
|
||||
@@ -613,7 +613,20 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
"Need BLUETOOTH ADMIN permission");
|
||||
if (DBG) {
|
||||
Slog.d(TAG,"enable(): mBluetooth =" + mBluetooth +
|
||||
" mBinding = " + mBinding);
|
||||
" mBinding = " + mBinding + " mState = " + mState);
|
||||
}
|
||||
// We do not honor ON requests when the adapter is already turned ON or in the process of
|
||||
// turning ON.
|
||||
// As a protective mechanism to make sure that the native stack gets cleaned up properly
|
||||
// before turning it back ON we ignore requests while the bluetooth is turning OFF.
|
||||
// Bug: b/28318203
|
||||
if (mState == BluetoothAdapter.STATE_BLE_TURNING_OFF ||
|
||||
mState == BluetoothAdapter.STATE_TURNING_OFF ||
|
||||
mState == BluetoothAdapter.STATE_ON ||
|
||||
mState == BluetoothAdapter.STATE_BLE_ON ||
|
||||
mState == BluetoothAdapter.STATE_TURNING_ON ||
|
||||
mState == BluetoothAdapter.STATE_BLE_TURNING_ON) {
|
||||
return false;
|
||||
}
|
||||
|
||||
synchronized(mReceiver) {
|
||||
|
||||
Reference in New Issue
Block a user