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

Commit e459f1d5 authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "Fix deadlock between PackageManager and DisplayManager" into main

parents b0286374 1e7589af
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -476,20 +476,30 @@ final class InstallPackageHelper {
            pkgSetting.setLoadingProgress(1f);
        }

        // TODO: passes the package name as an argument in a message to the handler for V+
        //  so we don't need to rely on creating lambda objects so frequently.
        if (UpdateOwnershipHelper.hasValidOwnershipDenyList(pkgSetting)) {
            mPm.mHandler.post(() -> handleUpdateOwnerDenyList(pkgSetting));
        }
        return pkg;
    }

    private void handleUpdateOwnerDenyList(PackageSetting pkgSetting) {
        ArraySet<String> listItems = mUpdateOwnershipHelper.readUpdateOwnerDenyList(pkgSetting);
        if (listItems != null && !listItems.isEmpty()) {
            mUpdateOwnershipHelper.addToUpdateOwnerDenyList(pkgSetting.getPackageName(), listItems);
            mUpdateOwnershipHelper.addToUpdateOwnerDenyList(pkgSetting.getPackageName(),
                    listItems);
            SystemConfig config = SystemConfig.getInstance();
            synchronized (mPm.mLock) {
                for (String unownedPackage : listItems) {
                    PackageSetting unownedSetting = mPm.mSettings.getPackageLPr(unownedPackage);
                SystemConfig config = SystemConfig.getInstance();
                    if (unownedSetting != null
                            && config.getSystemAppUpdateOwnerPackageName(unownedPackage) == null) {
                        unownedSetting.setUpdateOwnerPackage(null);
                    }
                }
            }

        return pkg;
        }
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ public class UpdateOwnershipHelper {

    private final Object mLock = new Object();

    private static boolean hasValidOwnershipDenyList(PackageSetting pkgSetting) {
    static boolean hasValidOwnershipDenyList(PackageSetting pkgSetting) {
        AndroidPackage pkg = pkgSetting.getPkg();
        // we're checking for uses-permission for these priv permissions instead of grant as we're
        // only considering system apps to begin with, so presumed to be granted.