diff options
author | Irfan Sheriff <isheriff@google.com> | 2012-08-29 15:35:57 -0700 |
---|---|---|
committer | Irfan Sheriff <isheriff@google.com> | 2012-08-29 15:35:57 -0700 |
commit | 6bfc88876ab575913299b477528225a4d7bf8232 (patch) | |
tree | b0d3577fa9a3ba17766da54d930d51b066544d34 /wifi | |
parent | 4bbb13976e54f6325cb013882891c02adea61ec5 (diff) | |
download | frameworks_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.java | 16 |
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 { |