diff options
author | xin He <xinhe@google.com> | 2016-02-18 11:13:36 -0800 |
---|---|---|
committer | xin He <xinhe@google.com> | 2016-02-18 15:20:55 -0800 |
commit | 4c618adccba43334df62ad7d2949138344c11f58 (patch) | |
tree | 2d16d8f3bcd05f52f516cc132827e7a5bb6f3694 /service | |
parent | 28a073ae465df4e92b11bc8c9b3a1890de375d30 (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.java | 16 |
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(); } } } |