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

Commit 489f2c2c authored by xulicheng's avatar xulicheng Committed by android-build-merger
Browse files

Merge "Ensure the generation is not changed before put value to cache"

am: 11ae580f

Change-Id: I5bf2c557f6f46f1455204761a9045b8b90d7ea32
parents 3dd0137e 11ae580f
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -1749,6 +1749,10 @@ public final class Settings {
            return true;
        }

        public int getCurrentGeneration() {
            return mCurrentGeneration;
        }

        private int readCurrentGeneration() {
            try {
                return mArray.get(mIndex);
@@ -1857,6 +1861,7 @@ public final class Settings {

        public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
            final boolean isSelf = (userHandle == UserHandle.myUserId());
            int currentGeneration = -1;
            if (isSelf) {
                synchronized (NameValueCache.this) {
                    if (mGenerationTracker != null) {
@@ -1870,6 +1875,9 @@ public final class Settings {
                        } else if (mValues.containsKey(name)) {
                            return mValues.get(name);
                        }
                        if (mGenerationTracker != null) {
                            currentGeneration = mGenerationTracker.getCurrentGeneration();
                        }
                    }
                }
            } else {
@@ -1960,8 +1968,11 @@ public final class Settings {
                                        });
                                    }
                                }
                                if (mGenerationTracker != null && currentGeneration ==
                                        mGenerationTracker.getCurrentGeneration()) {
                                    mValues.put(name, value);
                                }
                            }
                        } else {
                            if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
                                    + " by " + UserHandle.myUserId()
@@ -2001,8 +2012,11 @@ public final class Settings {

                String value = c.moveToNext() ? c.getString(0) : null;
                synchronized (NameValueCache.this) {
                    if(mGenerationTracker != null &&
                            currentGeneration == mGenerationTracker.getCurrentGeneration()) {
                        mValues.put(name, value);
                    }
                }
                if (LOCAL_LOGV) {
                    Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " +
                            name + " = " + (value == null ? "(null)" : value));