diff options
author | Dianne Hackborn <hackbod@google.com> | 2014-10-03 20:15:11 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-10-03 20:15:12 +0000 |
commit | 7caa51e6ec6443d5c1fdb96f7e42508b074b4278 (patch) | |
tree | b94284edf06fba2e41bd57e040919aa7ef714f7d /packages | |
parent | 7a60cdbd0989fdc262f7838b26c551a3417b7edb (diff) | |
parent | 67f175cf07ff52c5bee30536caad2e97800ab5b8 (diff) | |
download | frameworks_base-7caa51e6ec6443d5c1fdb96f7e42508b074b4278.zip frameworks_base-7caa51e6ec6443d5c1fdb96f7e42508b074b4278.tar.gz frameworks_base-7caa51e6ec6443d5c1fdb96f7e42508b074b4278.tar.bz2 |
Merge "Fix issue #17811029: Settings provider race when removing users" into lmp-dev
Diffstat (limited to 'packages')
-rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 3453a67..34e57bc 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -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 { |