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

Commit 65048bdc authored by Narayan Kamath's avatar Narayan Kamath
Browse files

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.

Change-Id: I50e08623f646a89bc166bded6a43e17c17930e58
parent 27dd94aa
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -218,6 +218,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;

@@ -333,7 +334,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;

    // ----------------------------------------------------------------
@@ -4143,7 +4143,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;
@@ -4163,7 +4162,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;
@@ -4643,6 +4642,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;
            }
@@ -4720,6 +4723,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;
                    }
@@ -9077,7 +9084,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) {