Merge "Fix deadlock in StagingManager.getSessions() method"

This commit is contained in:
Mohammad Samiul Islam
2020-07-09 07:48:34 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 16 deletions

View File

@@ -869,7 +869,16 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
@Override
public ParceledListSlice<SessionInfo> getStagedSessions() {
return mStagingManager.getSessions(Binder.getCallingUid());
final List<SessionInfo> result = new ArrayList<>();
synchronized (mSessions) {
for (int i = 0; i < mSessions.size(); i++) {
final PackageInstallerSession session = mSessions.valueAt(i);
if (session.isStaged() && !session.isDestroyed()) {
result.add(session.generateInfoForCaller(false, Binder.getCallingUid()));
}
}
}
return new ParceledListSlice<>(result);
}
@Override

View File

@@ -38,7 +38,6 @@ import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageParser.PackageParserException;
import android.content.pm.PackageParser.SigningDetails;
import android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion;
import android.content.pm.ParceledListSlice;
import android.content.pm.parsing.PackageInfoWithoutStateUtils;
import android.content.rollback.RollbackInfo;
import android.content.rollback.RollbackManager;
@@ -184,20 +183,6 @@ public class StagingManager {
mApexManager.markBootCompleted();
}
ParceledListSlice<PackageInstaller.SessionInfo> getSessions(int callingUid) {
final List<PackageInstaller.SessionInfo> result = new ArrayList<>();
synchronized (mStagedSessions) {
for (int i = 0; i < mStagedSessions.size(); i++) {
final PackageInstallerSession stagedSession = mStagedSessions.valueAt(i);
if (stagedSession.isDestroyed()) {
continue;
}
result.add(stagedSession.generateInfoForCaller(false /*icon*/, callingUid));
}
}
return new ParceledListSlice<>(result);
}
/**
* Validates the signature used to sign the container of the new apex package
*