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

Commit 3fb5b5d2 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Call prepareAppDataAfterInstall without mPackages lock

prepareAppDataAfterInstallInternal may call into ActivityManager which will
try to obtain a lock in a reversed order, which causes a deadlock.

Bug: 27336728
Change-Id: I91bb74cd06c6aa6cee057bab5972b0275d12125b
parent 0601a1c6
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -10668,14 +10668,14 @@ public class PackageManagerService extends IPackageManager.Stub {
                    pkgSetting.setInstalled(true, userId);
                    pkgSetting.setHidden(false, userId);
                    mSettings.writePackageRestrictionsLPr(userId);
                    if (pkgSetting.pkg != null) {
                        prepareAppDataAfterInstall(pkgSetting.pkg);
                    }
                    installed = true;
                }
            }
            if (installed) {
                if (pkgSetting.pkg != null) {
                    prepareAppDataAfterInstall(pkgSetting.pkg);
                }
                sendPackageAddedForUser(packageName, pkgSetting, userId);
            }
        } finally {
@@ -18040,6 +18040,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
     * correct for all installed apps. If there is an ownership mismatch, it
     * will try recovering system apps by wiping data; third-party app data is
     * left intact.
     * <p>
     * <em>Note: To avoid a deadlock, do not call this method with {@code mPackages} lock held</em>
     */
    private void prepareAppDataAfterInstall(PackageParser.Package pkg) {
        prepareAppDataAfterInstallInternal(pkg);