am e1a6299b: Relax locking when scanning private volumes.
* commit 'e1a6299b994bbdb304550e00d5b3b26a064bdf0c': Relax locking when scanning private volumes.
This commit is contained in:
@@ -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);
|
||||
for (PackageSetting ps : packages) {
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user