From dbd05a98e5ed8cd1a4678790df507d9741da5ba2 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 6 Jul 2015 12:55:48 -0400 Subject: [PATCH] Fix wifi crash Handle clearing state for resume on the same worker thread as everything else, this way there can't be concurrent modification. Bug: 22040227 Change-Id: I9ac78a19fc126c8103f3218e657ca93911d3890d --- .../com/android/settingslib/wifi/WifiTracker.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index ef08e1900ee73..33f993eddd675 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -176,10 +176,7 @@ public class WifiTracker { mScanner = new Scanner(); } - mScanResultCache.clear(); - mSeenBssids.clear(); - mScanId = 0; - + mWorkHandler.sendEmptyMessage(WorkHandler.MSG_RESUME); if (mWifiManager.isWifiEnabled()) { mScanner.resume(); } @@ -251,6 +248,12 @@ public class WifiTracker { } } + private void handleResume() { + mScanResultCache.clear(); + mSeenBssids.clear(); + mScanId = 0; + } + private Collection fetchScanResults() { mScanId++; final List newResults = mWifiManager.getScanResults(); @@ -544,6 +547,7 @@ public class WifiTracker { private final class WorkHandler extends Handler { private static final int MSG_UPDATE_ACCESS_POINTS = 0; private static final int MSG_UPDATE_NETWORK_INFO = 1; + private static final int MSG_RESUME = 2; public WorkHandler(Looper looper) { super(looper); @@ -558,6 +562,9 @@ public class WifiTracker { case MSG_UPDATE_NETWORK_INFO: updateNetworkInfo((NetworkInfo) msg.obj); break; + case MSG_RESUME: + handleResume(); + break; } } }