summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author xulicheng <xulicheng@xiaomi.com> 2017-08-28 20:11:08 +0000
committer android-build-merger <android-build-merger@google.com> 2017-08-28 20:11:08 +0000
commit848cde3bebefcc5ecf33a6822c5865489dcede74 (patch)
tree3a4572d6a0139ef956b9477aadc35db0ba29424c
parent7da529950c23808c1f04b28ba2153ddf190de75c (diff)
parent489f2c2c48243946268480995c442c5e9bf4d5e9 (diff)
Merge "Ensure the generation is not changed before put value to cache" am: 11ae580f81
am: 489f2c2c48 Change-Id: Idab1a2d1f4ee8cc28a38c3c82ea9a8ad7f9d3bf4
-rwxr-xr-xcore/java/android/provider/Settings.java18
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() + "]: " +