summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-06-01 20:06:25 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-06-01 20:06:25 +0000
commitf4dd1916bf6345c2d0069f949817c12686324ff9 (patch)
treedc020c717f2a5c0aadc2a5265c02988c51689182
parentf90eca34df4a5fb45bf4a073d21a02e7b3e616b8 (diff)
parent469e9bc6e1aa0cd5dacf51659e32bda38ddb7ab4 (diff)
downloadBluetooth-f4dd1916bf6345c2d0069f949817c12686324ff9.tar.gz
Merge "Improve internal state synchronization of the A2dpStateMachine" into oc-dev
-rwxr-xr-xsrc/com/android/bluetooth/a2dp/A2dpStateMachine.java25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/com/android/bluetooth/a2dp/A2dpStateMachine.java b/src/com/android/bluetooth/a2dp/A2dpStateMachine.java
index 2a8b7c0de..888cbae26 100755
--- a/src/com/android/bluetooth/a2dp/A2dpStateMachine.java
+++ b/src/com/android/bluetooth/a2dp/A2dpStateMachine.java
@@ -267,14 +267,22 @@ final class A2dpStateMachine extends StateMachine {
@Override
public void enter() {
log("Enter Disconnected: " + getCurrentMessage().what);
+ if (mCurrentDevice != null || mTargetDevice != null || mIncomingDevice != null) {
+ loge("ERROR: enter() inconsistent state in Disconnected: current = "
+ + mCurrentDevice + " target = " + mTargetDevice + " incoming = "
+ + mIncomingDevice);
+ }
}
@Override
public boolean processMessage(Message message) {
log("Disconnected process message: " + message.what);
if (mCurrentDevice != null || mTargetDevice != null || mIncomingDevice != null) {
- loge("ERROR: current, target, or mIncomingDevice not null in Disconnected");
- return NOT_HANDLED;
+ loge("ERROR: not null state in Disconnected: current = " + mCurrentDevice
+ + " target = " + mTargetDevice + " incoming = " + mIncomingDevice);
+ mCurrentDevice = null;
+ mTargetDevice = null;
+ mIncomingDevice = null;
}
boolean retValue = HANDLED;
@@ -374,6 +382,10 @@ final class A2dpStateMachine extends StateMachine {
@Override
public void enter() {
log("Enter Pending: " + getCurrentMessage().what);
+ if (mTargetDevice != null && mIncomingDevice != null) {
+ loge("ERROR: enter() inconsistent state in Pending: current = " + mCurrentDevice
+ + " target = " + mTargetDevice + " incoming = " + mIncomingDevice);
+ }
}
@Override
@@ -580,6 +592,11 @@ final class A2dpStateMachine extends StateMachine {
removeDeferredMessages(CONNECT);
log("Enter Connected: " + getCurrentMessage().what);
+ if (mTargetDevice != null || mIncomingDevice != null) {
+ loge("ERROR: enter() inconsistent state in Connected: current = " + mCurrentDevice
+ + " target = " + mTargetDevice + " incoming = " + mIncomingDevice);
+ }
+
// Upon connected, the audio starts out as stopped
broadcastAudioState(mCurrentDevice, BluetoothA2dp.STATE_NOT_PLAYING,
BluetoothA2dp.STATE_PLAYING);
@@ -629,7 +646,9 @@ final class A2dpStateMachine extends StateMachine {
BluetoothProfile.STATE_DISCONNECTED);
break;
}
- transitionTo(mPending);
+ synchronized (A2dpStateMachine.this) {
+ transitionTo(mPending);
+ }
}
break;
case STACK_EVENT: