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

Commit b224624b authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Android (Google) Code Review
Browse files

Merge "Prevent crash in AccountManager after profile removal." into udc-qpr-dev

parents 357dee67 012998e4
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()) {