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

Commit 281a868c authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android Git Automerger
Browse files

am e1a6299b: Relax locking when scanning private volumes.

* commit 'e1a6299b':
  Relax locking when scanning private volumes.
parents 7aa79efe e1a6299b
Loading
Loading
Loading
Loading
+31 −7
Original line number Diff line number Diff line
@@ -15678,14 +15678,28 @@ public class PackageManagerService extends IPackageManager.Stub {
        }
    }
    private void loadPrivatePackages(VolumeInfo vol) {
    private void loadPrivatePackages(final VolumeInfo vol) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                loadPrivatePackagesInner(vol);
            }
        });
    }
    private void loadPrivatePackagesInner(VolumeInfo vol) {
        final ArrayList<ApplicationInfo> loaded = new ArrayList<>();
        final int parseFlags = mDefParseFlags | PackageParser.PARSE_EXTERNAL_STORAGE;
        synchronized (mInstallLock) {
        final VersionInfo ver;
        final List<PackageSetting> packages;
        synchronized (mPackages) {
            final VersionInfo ver = mSettings.findOrCreateVersion(vol.fsUuid);
            final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(vol.fsUuid);
            ver = mSettings.findOrCreateVersion(vol.fsUuid);
            packages = mSettings.getVolumePackagesLPr(vol.fsUuid);
        }
        for (PackageSetting ps : packages) {
            synchronized (mInstallLock) {
                final PackageParser.Package pkg;
                try {
                    pkg = scanPackageLI(ps.codePath, parseFlags, SCAN_INITIAL, 0L, null);
@@ -15698,7 +15712,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                    deleteCodeCacheDirsLI(ps.volumeUuid, ps.name);
                }
            }
        }
        synchronized (mPackages) {
            int updateFlags = UPDATE_PERMISSIONS_ALL;
            if (ver.sdkVersion != mSdkVersion) {
                logCriticalInfo(Log.INFO, "Platform changed from " + ver.sdkVersion + " to "
@@ -15712,13 +15728,21 @@ public class PackageManagerService extends IPackageManager.Stub {
            mSettings.writeLPr();
        }
        }
        if (DEBUG_INSTALL) Slog.d(TAG, "Loaded packages " + loaded);
        sendResourcesChangedBroadcast(true, false, loaded, null);
    }
    private void unloadPrivatePackages(VolumeInfo vol) {
    private void unloadPrivatePackages(final VolumeInfo vol) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                unloadPrivatePackagesInner(vol);
            }
        });
    }
    private void unloadPrivatePackagesInner(VolumeInfo vol) {
        final ArrayList<ApplicationInfo> unloaded = new ArrayList<>();
        synchronized (mInstallLock) {
        synchronized (mPackages) {