Merge "Ensure the generation is not changed before put value to cache" am: 11ae580f81
am: 489f2c2c48
Change-Id: Idab1a2d1f4ee8cc28a38c3c82ea9a8ad7f9d3bf4
This commit is contained in:
@@ -1749,6 +1749,10 @@ public final class Settings {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCurrentGeneration() {
|
||||||
|
return mCurrentGeneration;
|
||||||
|
}
|
||||||
|
|
||||||
private int readCurrentGeneration() {
|
private int readCurrentGeneration() {
|
||||||
try {
|
try {
|
||||||
return mArray.get(mIndex);
|
return mArray.get(mIndex);
|
||||||
@@ -1857,6 +1861,7 @@ public final class Settings {
|
|||||||
|
|
||||||
public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
|
public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
|
||||||
final boolean isSelf = (userHandle == UserHandle.myUserId());
|
final boolean isSelf = (userHandle == UserHandle.myUserId());
|
||||||
|
int currentGeneration = -1;
|
||||||
if (isSelf) {
|
if (isSelf) {
|
||||||
synchronized (NameValueCache.this) {
|
synchronized (NameValueCache.this) {
|
||||||
if (mGenerationTracker != null) {
|
if (mGenerationTracker != null) {
|
||||||
@@ -1870,6 +1875,9 @@ public final class Settings {
|
|||||||
} else if (mValues.containsKey(name)) {
|
} else if (mValues.containsKey(name)) {
|
||||||
return mValues.get(name);
|
return mValues.get(name);
|
||||||
}
|
}
|
||||||
|
if (mGenerationTracker != null) {
|
||||||
|
currentGeneration = mGenerationTracker.getCurrentGeneration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1960,8 +1968,11 @@ public final class Settings {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (mGenerationTracker != null && currentGeneration ==
|
||||||
|
mGenerationTracker.getCurrentGeneration()) {
|
||||||
mValues.put(name, value);
|
mValues.put(name, value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
|
if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
|
||||||
+ " by " + UserHandle.myUserId()
|
+ " by " + UserHandle.myUserId()
|
||||||
@@ -2001,8 +2012,11 @@ public final class Settings {
|
|||||||
|
|
||||||
String value = c.moveToNext() ? c.getString(0) : null;
|
String value = c.moveToNext() ? c.getString(0) : null;
|
||||||
synchronized (NameValueCache.this) {
|
synchronized (NameValueCache.this) {
|
||||||
|
if(mGenerationTracker != null &&
|
||||||
|
currentGeneration == mGenerationTracker.getCurrentGeneration()) {
|
||||||
mValues.put(name, value);
|
mValues.put(name, value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (LOCAL_LOGV) {
|
if (LOCAL_LOGV) {
|
||||||
Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " +
|
Log.v(TAG, "cache miss [" + mUri.getLastPathSegment() + "]: " +
|
||||||
name + " = " + (value == null ? "(null)" : value));
|
name + " = " + (value == null ? "(null)" : value));
|
||||||
|
|||||||
Reference in New Issue
Block a user