Skip to content

Commit 67f175c

Browse files
author
Dianne Hackborn
committed
Fix issue #17811029: Settings provider race when removing users
Change-Id: Ia40d0a9c161b765d1340db5390d0acdbfc050b81
1 parent 1e2e430 commit 67f175c

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)