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

Commit 52af2ca9 authored by Narayan Kamath's avatar Narayan Kamath Committed by Christopher Tate
Browse files

DO NOT MERGE - Remove data dirs if a new install fails dexopt.

We'd otherwise leave the data dirs & native libraries
lying around. This will leave the app permanently broken
because the next install of the app will fail with
INSTALL_FAILED_UID_CHANGED.

Also remove an unnecessary instance variable.

Cherry-pick from master
Bug 13416059

Change-Id: I1e644aab74d5ea519231800915b39c2f55d043ae
parent 68c0346b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -217,6 +217,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    static final int SCAN_UPDATE_TIME = 1<<6;
    static final int SCAN_DEFER_DEX = 1<<7;
    static final int SCAN_BOOTING = 1<<8;
    static final int SCAN_DELETE_DATA_ON_FAILURES = 1<<9;

    static final int REMOVE_CHATTY = 1<<16;

@@ -332,7 +333,6 @@ public class PackageManagerService extends IPackageManager.Stub {
            new HashMap<String, PackageParser.Package>();

    // Information for the parser to write more useful error messages.
    File mScanningPath;
    int mLastScanError;

    // ----------------------------------------------------------------
@@ -4144,7 +4144,6 @@ public class PackageManagerService extends IPackageManager.Stub {
            mLastScanError = PackageManager.INSTALL_FAILED_INVALID_APK;
            return null;
        }
        mScanningPath = scanFile;

        if ((parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0) {
            pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
@@ -4164,7 +4163,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                if (mAndroidApplication != null) {
                    Slog.w(TAG, "*************************************************");
                    Slog.w(TAG, "Core android package being redefined.  Skipping.");
                    Slog.w(TAG, " file=" + mScanningPath);
                    Slog.w(TAG, " file=" + scanFile);
                    Slog.w(TAG, "*************************************************");
                    mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
                    return null;
@@ -4644,6 +4643,10 @@ public class PackageManagerService extends IPackageManager.Stub {
        if ((scanMode&SCAN_NO_DEX) == 0) {
            if (performDexOptLI(pkg, forceDex, (scanMode&SCAN_DEFER_DEX) != 0, false)
                    == DEX_OPT_FAILED) {
                if ((scanMode & SCAN_DELETE_DATA_ON_FAILURES) != 0) {
                    removeDataDirsLI(pkg.packageName);
                }

                mLastScanError = PackageManager.INSTALL_FAILED_DEXOPT;
                return null;
            }
@@ -4721,6 +4724,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                    PackageParser.Package clientPkg = clientLibPkgs.get(i);
                    if (performDexOptLI(clientPkg, forceDex, (scanMode&SCAN_DEFER_DEX) != 0, false)
                            == DEX_OPT_FAILED) {
                        if ((scanMode & SCAN_DELETE_DATA_ON_FAILURES) != 0) {
                            removeDataDirsLI(pkg.packageName);
                        }

                        mLastScanError = PackageManager.INSTALL_FAILED_DEXOPT;
                        return null;
                    }
@@ -9075,7 +9082,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            replacePackageLI(pkg, parseFlags, scanMode, args.user,
                    installerPackageName, res);
        } else {
            installNewPackageLI(pkg, parseFlags, scanMode, args.user,
            installNewPackageLI(pkg, parseFlags, scanMode | SCAN_DELETE_DATA_ON_FAILURES, args.user,
                    installerPackageName, res);
        }
        synchronized (mPackages) {