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

Commit a31e90d2 authored by Christopher R. Palmer's avatar Christopher R. Palmer
Browse files

PackageManager: Fix concurrent access to shared state

Stop multiple threads from all calling add on the same HashMap.

Cleanup the use of a boolean flag by removing concurrent writes
to it.

Change-Id: I8d61fe7294dcb67ee7d0d7de88d90d2051c310e6
parent 16742e56
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -1270,7 +1270,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    Slog.w(TAG, "No BOOTCLASSPATH found!");
                }
                final boolean[] didDexOpt = {false};
                boolean didDexOpt = false;
                /**
                 * Ensure all external libraries have had dexopt run on them.
@@ -1285,12 +1285,13 @@ public class PackageManagerService extends IPackageManager.Stub {
                        }
                        try {
                            if (dalvik.system.DexFile.isDexOptNeeded(lib)) {
                                alreadyDexOpted.add(lib);
                                didDexOpt = true;
                                executorService.submit(new Runnable() {
                                    @Override
                                    public void run() {
                                        alreadyDexOpted.add(lib);
                                        mInstaller.dexopt(lib, Process.SYSTEM_UID, true);
                                        didDexOpt[0] = true;
                                    }
                                });
                            }
@@ -1341,11 +1342,12 @@ public class PackageManagerService extends IPackageManager.Stub {
                        }
                        try {
                            if (dalvik.system.DexFile.isDexOptNeeded(path)) {
                                didDexOpt = true;
                                executorService.submit(new Runnable() {
                                    @Override
                                    public void run() {
                                        mInstaller.dexopt(path, Process.SYSTEM_UID, true);
                                        didDexOpt[0] = true;
                                    }
                                });
                            }
@@ -1363,7 +1365,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    }
                }
                if (didDexOpt[0]) {
                if (didDexOpt) {
                    File dalvikCacheDir = new File(dataDir, "dalvik-cache");
                    // If we had to do a dexopt of one of the previous