summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorxin He <xinhe@google.com>2016-02-18 11:13:36 -0800
committerxin He <xinhe@google.com>2016-02-18 15:20:55 -0800
commit4c618adccba43334df62ad7d2949138344c11f58 (patch)
tree2d16d8f3bcd05f52f516cc132827e7a5bb6f3694 /service
parent28a073ae465df4e92b11bc8c9b3a1890de375d30 (diff)
Fix QNS bssid blacklist update
The crash is due to delete map entries not through the iterator's remove method when transverse the map. Removing item will change the size of iterator and java.util.ConcurrentModificationException will be thrown at next iterator.next(). The correct way is to remove item through the iterator's remove method. BUG=27243032 Change-Id: Iede6efeafacaf8a33cce44f56e0c2b58e598e07e
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiQualifiedNetworkSelection.java16
1 files changed, 7 insertions, 9 deletions
diff --git a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelection.java b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelection.java
index 82e82fdc3..0affbe1ee 100644
--- a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelection.java
+++ b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelection.java
@@ -32,9 +32,9 @@ import com.android.internal.R;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
class WifiQualifiedNetworkSelector {
private WifiConfigStore mWifiConfigStore;
@@ -559,15 +559,13 @@ class WifiQualifiedNetworkSelector {
* were blacked before BSSID_BLACKLIST_EXPIRE_TIME, re-enable it again.
*/
private void updateBssidBlacklist() {
- Set<String> keys = mBssidBlacklist.keySet();
- if (keys != null && keys.size() > 0) {
- for (String bssid : keys) {
- BssidBlacklistStatus status = mBssidBlacklist.get(bssid);
- if (status != null && status.mIsBlacklisted) {
- if (mClock.currentTimeMillis() - status.mBlacklistedTimeStamp
+ Iterator<BssidBlacklistStatus> iter = mBssidBlacklist.values().iterator();
+ while (iter.hasNext()) {
+ BssidBlacklistStatus status = iter.next();
+ if (status != null && status.mIsBlacklisted) {
+ if (mClock.currentTimeMillis() - status.mBlacklistedTimeStamp
>= BSSID_BLACKLIST_EXPIRE_TIME) {
- enableBssidForQualityNetworkSelection(bssid, true);
- }
+ iter.remove();
}
}
}