Skip to content

Commit f74f1ac

Browse files
isheriffAndroid (Google) Code Review
authored andcommitted
Merge "Add work around to restart driver on failure" into jb-dev
2 parents dfae6db + f91d4e7 commit f74f1ac

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

wifi/java/android/net/wifi/WifiStateMachine.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,14 @@ public class WifiStateMachine extends StateMachine {
182182
/* Tracks sequence number on a tether notification time out */
183183
private int mTetherToken = 0;
184184

185+
/**
186+
* Driver start time out.
187+
*/
188+
private static final int DRIVER_START_TIME_OUT_MSECS = 10000;
189+
190+
/* Tracks sequence number on a driver time out */
191+
private int mDriverStartToken = 0;
192+
185193
private LinkProperties mLinkProperties;
186194

187195
/* Tracks sequence number on a periodic scan message */
@@ -250,7 +258,8 @@ public class WifiStateMachine extends StateMachine {
250258
static final int CMD_STOP_SUPPLICANT_FAILED = BASE + 17;
251259
/* Delayed stop to avoid shutting down driver too quick*/
252260
static final int CMD_DELAYED_STOP_DRIVER = BASE + 18;
253-
261+
/* A delayed message sent to start driver when it fail to come up */
262+
static final int CMD_DRIVER_START_TIMED_OUT = BASE + 19;
254263

255264
/* Start the soft access point */
256265
static final int CMD_START_AP = BASE + 21;
@@ -1837,6 +1846,7 @@ public boolean processMessage(Message message) {
18371846
case CMD_START_DRIVER:
18381847
case CMD_STOP_DRIVER:
18391848
case CMD_DELAYED_STOP_DRIVER:
1849+
case CMD_DRIVER_START_TIMED_OUT:
18401850
case CMD_START_AP:
18411851
case CMD_START_AP_SUCCESS:
18421852
case CMD_START_AP_FAILURE:
@@ -2476,10 +2486,16 @@ public boolean processMessage(Message message) {
24762486
}
24772487

24782488
class DriverStartingState extends State {
2489+
private int mTries;
24792490
@Override
24802491
public void enter() {
24812492
if (DBG) log(getName() + "\n");
24822493
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
2494+
2495+
mTries = 1;
2496+
/* Send ourselves a delayed message to start driver a second time */
2497+
sendMessageDelayed(obtainMessage(CMD_DRIVER_START_TIMED_OUT,
2498+
++mDriverStartToken, 0), DRIVER_START_TIME_OUT_MSECS);
24832499
}
24842500
@Override
24852501
public boolean processMessage(Message message) {
@@ -2495,6 +2511,24 @@ public boolean processMessage(Message message) {
24952511
transitionTo(mDriverStartedState);
24962512
}
24972513
break;
2514+
case CMD_DRIVER_START_TIMED_OUT:
2515+
if (message.arg1 == mDriverStartToken) {
2516+
if (mTries >= 2) {
2517+
loge("Failed to start driver after " + mTries);
2518+
transitionTo(mDriverStoppedState);
2519+
} else {
2520+
loge("Driver start failed, retrying");
2521+
mWakeLock.acquire();
2522+
mWifiNative.startDriver();
2523+
mWakeLock.release();
2524+
2525+
++mTries;
2526+
/* Send ourselves a delayed message to start driver again */
2527+
sendMessageDelayed(obtainMessage(CMD_DRIVER_START_TIMED_OUT,
2528+
++mDriverStartToken, 0), DRIVER_START_TIME_OUT_MSECS);
2529+
}
2530+
}
2531+
break;
24982532
/* Queue driver commands & connection events */
24992533
case CMD_START_DRIVER:
25002534
case CMD_STOP_DRIVER:

0 commit comments

Comments
 (0)