Skip to content

Commit 7caa51e

Browse files
Dianne HackbornAndroid (Google) Code Review
authored andcommitted
Merge "Fix issue #17811029: Settings provider race when removing users" into lmp-dev
2 parents 7a60cdb + 67f175c commit 7caa51e

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,14 @@ private void startAsyncCachePopulation(int userHandle) {
506506
}
507507

508508
private void fullyPopulateCaches(final int userHandle) {
509-
DatabaseHelper dbHelper = mOpenHelpers.get(userHandle);
509+
DatabaseHelper dbHelper;
510+
synchronized (this) {
511+
dbHelper = mOpenHelpers.get(userHandle);
512+
}
513+
if (dbHelper == null) {
514+
// User is gone.
515+
return;
516+
}
510517
// Only populate the globals cache once, for the owning user
511518
if (userHandle == UserHandle.USER_OWNER) {
512519
fullyPopulateCache(dbHelper, TABLE_GLOBAL, sGlobalCache);
@@ -611,10 +618,15 @@ private DatabaseHelper getOrEstablishDatabase(int callingUser) {
611618

612619
long oldId = Binder.clearCallingIdentity();
613620
try {
614-
DatabaseHelper dbHelper = mOpenHelpers.get(callingUser);
621+
DatabaseHelper dbHelper;
622+
synchronized (this) {
623+
dbHelper = mOpenHelpers.get(callingUser);
624+
}
615625
if (null == dbHelper) {
616626
establishDbTracking(callingUser);
617-
dbHelper = mOpenHelpers.get(callingUser);
627+
synchronized (this) {
628+
dbHelper = mOpenHelpers.get(callingUser);
629+
}
618630
}
619631
return dbHelper;
620632
} finally {

0 commit comments

Comments
 (0)