diff options
| author | 2017-08-28 20:11:08 +0000 | |
|---|---|---|
| committer | 2017-08-28 20:11:08 +0000 | |
| commit | 848cde3bebefcc5ecf33a6822c5865489dcede74 (patch) | |
| tree | 3a4572d6a0139ef956b9477aadc35db0ba29424c | |
| parent | 7da529950c23808c1f04b28ba2153ddf190de75c (diff) | |
| parent | 489f2c2c48243946268480995c442c5e9bf4d5e9 (diff) | |
Merge "Ensure the generation is not changed before put value to cache" am: 11ae580f81
am: 489f2c2c48
Change-Id: Idab1a2d1f4ee8cc28a38c3c82ea9a8ad7f9d3bf4
| -rwxr-xr-x | core/java/android/provider/Settings.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 2d8ed7adab55..06e76fed6b97 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -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,7 +1968,10 @@ public final class Settings { }); } } - mValues.put(name, value); + if (mGenerationTracker != null && currentGeneration == + mGenerationTracker.getCurrentGeneration()) { + mValues.put(name, value); + } } } else { if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle @@ -2001,7 +2012,10 @@ public final class Settings { String value = c.moveToNext() ? c.getString(0) : null; synchronized (NameValueCache.this) { - mValues.put(name, value); + if(mGenerationTracker != null && + currentGeneration == mGenerationTracker.getCurrentGeneration()) { + mValues.put(name, value); + } } if (LOCAL_LOGV) { Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " + |