Merge "Fix dead lock in Tethering state machine"

am: 355dbae680

Change-Id: Idd08726f3eeebba49a9ad909464377af67600d30
This commit is contained in:
Erik Kline
2017-03-01 11:46:10 +00:00
committed by android-build-merger
2 changed files with 14 additions and 1 deletions

View File

@@ -950,6 +950,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
// Events from NetworkCallbacks that we process on the master state
// machine thread on behalf of the UpstreamNetworkMonitor.
static final int EVENT_UPSTREAM_CALLBACK = BASE_MASTER + 5;
// we treated the error and want now to clear it
static final int CMD_CLEAR_ERROR = BASE_MASTER + 6;
private State mInitialState;
private State mTetherModeAliveState;
@@ -1491,6 +1493,10 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
TetherInterfaceStateMachine who = (TetherInterfaceStateMachine)message.obj;
who.sendMessage(mErrorNotification);
break;
case CMD_CLEAR_ERROR:
mErrorNotification = ConnectivityManager.TETHER_ERROR_NO_ERROR;
transitionTo(mInitialState);
break;
default:
retValue = false;
}
@@ -1635,6 +1641,12 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
// Not really very much we can do here.
}
// If TetherMasterSM is in ErrorState, TetherMasterSM stays there.
// Thus we give a chance for TetherMasterSM to recover to InitialState
// by sending CMD_CLEAR_ERROR
if (error == ConnectivityManager.TETHER_ERROR_MASTER_ERROR) {
mTetherMasterSM.sendMessage(TetherMasterSM.CMD_CLEAR_ERROR, who);
}
switch (state) {
case IControlsTethering.STATE_UNAVAILABLE:
case IControlsTethering.STATE_AVAILABLE:

View File

@@ -167,7 +167,8 @@ public class TetherInterfaceStateMachine extends StateMachine {
private void maybeLogMessage(State state, int what) {
if (DBG) {
Log.d(TAG, state.getName() + " got " +
sMagicDecoderRing.get(what, Integer.toString(what)));
sMagicDecoderRing.get(what, Integer.toString(what)) + ", Iface = " +
mIfaceName);
}
}