Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 221327dc authored by Sundeep Ghuman's avatar Sundeep Ghuman
Browse files

Fix Array Index out of bounds error.

This error was caused by concurrent modification of the
mPendingNotifications SparseIntArray which fell outside the
synchronization block in copyAndNotifyListeners. Now the entire
copyAndNotifyListeners is synchronized on mLock.

Bug: b/37775443
Test: runtest --path
frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java

Change-Id: I19e8a4ecea5cd45122f4ca89f8ed959e500c951a
parent 074a67c1
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -124,7 +124,8 @@ public class WifiTracker {
    */
    private final Object mLock = new Object();

    //visible to both worker and main thread. Guarded by #mInternalAccessPoints
    //visible to both worker and main thread.
    @GuardedBy("mLock")
    private final AccessPointListenerAdapter mAccessPointListenerAdapter
            = new AccessPointListenerAdapter();

@@ -1005,12 +1006,13 @@ public class WifiTracker {
        if (DBG) {
            Log.d(TAG, "Starting to copy AP items on the MainHandler");
        }
        synchronized (mLock) {
            if (notifyListeners) {
                notificationMap = mAccessPointListenerAdapter.mPendingNotifications.clone();
            }

            mAccessPointListenerAdapter.mPendingNotifications.clear();
        synchronized (mLock) {

            for (AccessPoint internalAccessPoint : mInternalAccessPoints) {
                AccessPoint accessPoint = oldAccessPoints.get(internalAccessPoint.mId);
                if (accessPoint == null) {