* commit '7caa51e6ec6443d5c1fdb96f7e42508b074b4278': Fix issue #17811029: Settings provider race when removing users
This commit is contained in:
@@ -506,7 +506,14 @@ public class SettingsProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
private void fullyPopulateCaches(final int userHandle) {
|
||||
DatabaseHelper dbHelper = mOpenHelpers.get(userHandle);
|
||||
DatabaseHelper dbHelper;
|
||||
synchronized (this) {
|
||||
dbHelper = mOpenHelpers.get(userHandle);
|
||||
}
|
||||
if (dbHelper == null) {
|
||||
// User is gone.
|
||||
return;
|
||||
}
|
||||
// Only populate the globals cache once, for the owning user
|
||||
if (userHandle == UserHandle.USER_OWNER) {
|
||||
fullyPopulateCache(dbHelper, TABLE_GLOBAL, sGlobalCache);
|
||||
@@ -611,10 +618,15 @@ public class SettingsProvider extends ContentProvider {
|
||||
|
||||
long oldId = Binder.clearCallingIdentity();
|
||||
try {
|
||||
DatabaseHelper dbHelper = mOpenHelpers.get(callingUser);
|
||||
DatabaseHelper dbHelper;
|
||||
synchronized (this) {
|
||||
dbHelper = mOpenHelpers.get(callingUser);
|
||||
}
|
||||
if (null == dbHelper) {
|
||||
establishDbTracking(callingUser);
|
||||
dbHelper = mOpenHelpers.get(callingUser);
|
||||
synchronized (this) {
|
||||
dbHelper = mOpenHelpers.get(callingUser);
|
||||
}
|
||||
}
|
||||
return dbHelper;
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user