Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e61e1ee authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Automerger Merge Worker
Browse files

Merge "Prevent crash in AccountManager after profile removal." am: 6cbae2d6...

Merge "Prevent crash in AccountManager after profile removal." am: 6cbae2d6 am: 97bf3c58 am: 86ae0334

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2640545



Change-Id: I644d624312c09d2ed3b54562b6329dcfe2512bb2
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 817d0ca0 86ae0334
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import android.content.pm.Signature;
import android.content.pm.SigningDetails.CertCapabilities;
import android.content.pm.UserInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteCantOpenDatabaseException;
import android.database.sqlite.SQLiteFullException;
import android.database.sqlite.SQLiteStatement;
import android.os.Binder;
@@ -1415,7 +1416,13 @@ public class AccountManagerService
    private void purgeOldGrants(UserAccounts accounts) {
        synchronized (accounts.dbLock) {
            synchronized (accounts.cacheLock) {
                List<Integer> uids = accounts.accountsDb.findAllUidGrants();
                List<Integer> uids;
                try {
                    uids = accounts.accountsDb.findAllUidGrants();
                } catch (SQLiteCantOpenDatabaseException e) {
                    Log.w(TAG, "Could not delete grants for user = " + accounts.userId);
                    return;
                }
                for (int uid : uids) {
                    final boolean packageExists = mPackageManager.getPackagesForUid(uid) != null;
                    if (packageExists) {
@@ -1441,7 +1448,13 @@ public class AccountManagerService
                    mPackageManager.getPackageUidAsUser(packageName, accounts.userId);
                } catch (NameNotFoundException e) {
                    // package does not exist - remove visibility values
                    try {
                        accounts.accountsDb.deleteAccountVisibilityForPackage(packageName);
                    } catch (SQLiteCantOpenDatabaseException sqlException) {
                        Log.w(TAG, "Could not delete account visibility for user = "
                                + accounts.userId, sqlException);
                        continue;
                    }
                    synchronized (accounts.dbLock) {
                        synchronized (accounts.cacheLock) {
                            for (Account account : accounts.visibilityCache.keySet()) {