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
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index ef08e19..33f993e 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 @@
mScanner = new Scanner();
}
- mScanResultCache.clear();
- mSeenBssids.clear();
- mScanId = 0;
-
+ mWorkHandler.sendEmptyMessage(WorkHandler.MSG_RESUME);
if (mWifiManager.isWifiEnabled()) {
mScanner.resume();
}
@@ -251,6 +248,12 @@
}
}
+ private void handleResume() {
+ mScanResultCache.clear();
+ mSeenBssids.clear();
+ mScanId = 0;
+ }
+
private Collection<ScanResult> fetchScanResults() {
mScanId++;
final List<ScanResult> newResults = mWifiManager.getScanResults();
@@ -544,6 +547,7 @@
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 @@
case MSG_UPDATE_NETWORK_INFO:
updateNetworkInfo((NetworkInfo) msg.obj);
break;
+ case MSG_RESUME:
+ handleResume();
+ break;
}
}
}