summaryrefslogtreecommitdiffstats
path: root/wifi
diff options
context:
space:
mode:
authorIrfan Sheriff <isheriff@google.com>2012-08-29 15:35:57 -0700
committerIrfan Sheriff <isheriff@google.com>2012-08-29 15:35:57 -0700
commit6bfc88876ab575913299b477528225a4d7bf8232 (patch)
treeb0d3577fa9a3ba17766da54d930d51b066544d34 /wifi
parent4bbb13976e54f6325cb013882891c02adea61ec5 (diff)
downloadframeworks_base-6bfc88876ab575913299b477528225a4d7bf8232.zip
frameworks_base-6bfc88876ab575913299b477528225a4d7bf8232.tar.gz
frameworks_base-6bfc88876ab575913299b477528225a4d7bf8232.tar.bz2
Fix DHCP handling at disconnect/reconnect
Wifi can have a quick disconnection followed by a reconnection. We used to create a new DHCP state machine thread for every new connection and never really waited until it quit after disconnect. This may have lead to situations where repeated disconnect/reconnects resulted in multiple dhcp start calls. We now keep the statemachine after a disconnect and only shut it at supplicant stop. Bug: 6417686 Change-Id: Icf66efdc654be886e3eb46c81f09f8cce536f2f6
Diffstat (limited to 'wifi')
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java16
1 files changed, 11 insertions, 5 deletions
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index b4456b9..b52250d 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -1672,10 +1672,7 @@ public class WifiStateMachine extends StateMachine {
/* In case we were in middle of DHCP operation
restore back powermode */
handlePostDhcpSetup();
-
mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP);
- mDhcpStateMachine.doQuit();
- mDhcpStateMachine = null;
}
try {
@@ -1928,6 +1925,9 @@ public class WifiStateMachine extends StateMachine {
case CMD_CLEAR_SUSPEND_OPTIMIZATIONS:
case CMD_NO_NETWORKS_PERIODIC_SCAN:
break;
+ case DhcpStateMachine.CMD_ON_QUIT:
+ mDhcpStateMachine = null;
+ break;
case CMD_SET_SUSPEND_OPTIMIZATIONS:
mSuspendWakeLock.release();
break;
@@ -2498,6 +2498,9 @@ public class WifiStateMachine extends StateMachine {
/* Send any reset commands to supplicant before shutting it down */
handleNetworkDisconnect();
+ if (mDhcpStateMachine != null) {
+ mDhcpStateMachine.doQuit();
+ }
if (DBG) log("stopping supplicant");
if (!mWifiNative.stopSupplicant()) {
@@ -3197,8 +3200,11 @@ public class WifiStateMachine extends StateMachine {
if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
//start DHCP
- mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(
- mContext, WifiStateMachine.this, mInterfaceName);
+ if (mDhcpStateMachine == null) {
+ mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(
+ mContext, WifiStateMachine.this, mInterfaceName);
+
+ }
mDhcpStateMachine.registerForPreDhcpNotification();
mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP);
} else {