From d69f649eaf265ecee75757f34bb83b6068968e3d Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Fri, 3 Dec 2010 09:59:07 -0800 Subject: [PATCH] DO NOT MERGE Avoid nullifying dhcp target A race condition causes an NPE on mDhcpTarget. The safest change is to avoid nullifying it. A dummy call to remove messages on a handler whose looper is quit should do no harm. Bug: 3191203 Change-Id: I7613a5add873ce9512e9719cb2dc8da61255370e --- wifi/java/android/net/wifi/WifiStateTracker.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java index 5540174680758..27e6a72ec977c 100644 --- a/wifi/java/android/net/wifi/WifiStateTracker.java +++ b/wifi/java/android/net/wifi/WifiStateTracker.java @@ -933,10 +933,8 @@ public class WifiStateTracker extends NetworkStateTracker { resetConnections(true); } // When supplicant dies, kill the DHCP thread - if (mDhcpTarget != null) { - mDhcpTarget.getLooper().quit(); - mDhcpTarget = null; - } + mDhcpTarget.getLooper().quit(); + mContext.removeStickyBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION)); if (ActivityManagerNative.isSystemReady()) { intent = new Intent(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); @@ -1407,10 +1405,9 @@ public class WifiStateTracker extends NetworkStateTracker { NetworkUtils.resetConnections(mInterfaceName); // Stop DHCP - if (mDhcpTarget != null) { - mDhcpTarget.setCancelCallback(true); - mDhcpTarget.removeMessages(EVENT_DHCP_START); - } + mDhcpTarget.setCancelCallback(true); + mDhcpTarget.removeMessages(EVENT_DHCP_START); + if (!NetworkUtils.stopDhcp(mInterfaceName)) { Log.e(TAG, "Could not stop DHCP"); }