Merge "Recover immediately from driver hang" into jb-dev
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 0cc1380..3503633 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -2814,15 +2814,15 @@
                     break;
                 case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
                     SupplicantState state = handleSupplicantStateChange(message);
-                    // Due to a WEXT bug, during the time of driver start/stop
-                    // we can go into a driver stopped state in an unexpected way.
-                    // The sequence eventually puts interface
-                    // up and we should be back to a connected state
+                    // A driver/firmware hang can now put the interface in a down state.
+                    // We detect the interface going down and recover from it
                     if (!SupplicantState.isDriverActive(state)) {
                         if (mNetworkInfo.getState() != NetworkInfo.State.DISCONNECTED) {
                             handleNetworkDisconnect();
                         }
+                        log("Detected an interface down, restart driver");
                         transitionTo(mDriverStoppedState);
+                        sendMessage(CMD_START_DRIVER);
                         break;
                     }