summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java4
-rw-r--r--services/core/java/com/android/server/pm/StagingManager.java23
2 files changed, 20 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index b571a9c5ce13..bb5a953d3a8f 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1060,7 +1060,9 @@ class PackageManagerShellCommand extends ShellCommand {
+ "; isStaged = " + session.isStaged()
+ "; isReady = " + session.isStagedSessionReady()
+ "; isApplied = " + session.isStagedSessionApplied()
- + "; isFailed = " + session.isStagedSessionFailed() + ";");
+ + "; isFailed = " + session.isStagedSessionFailed()
+ + "; errorMsg = " + session.getStagedSessionErrorMessage()
+ + ";");
}
private Intent parseIntentAndUser() throws URISyntaxException {
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 0c96f592c0db..33433db1a448 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -605,13 +605,14 @@ public class StagingManager {
// If checkpoint is supported, then we only resume sessions if we are in checkpointing
// mode. If not, we fail all sessions.
if (supportsCheckpoint() && !needsCheckpoint()) {
- String errorMsg = "Reverting back to safe state. Marking " + session.sessionId
- + " as failed";
- if (!TextUtils.isEmpty(mFailureReason)) {
- errorMsg = errorMsg + ": " + mFailureReason;
+ String revertMsg = "Reverting back to safe state. Marking "
+ + session.sessionId + " as failed.";
+ final String reasonForRevert = getReasonForRevert();
+ if (!TextUtils.isEmpty(reasonForRevert)) {
+ revertMsg += " Reason for revert: " + reasonForRevert;
}
- Slog.d(TAG, errorMsg);
- session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_UNKNOWN, errorMsg);
+ Slog.d(TAG, revertMsg);
+ session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_UNKNOWN, revertMsg);
return;
}
} catch (RemoteException e) {
@@ -715,6 +716,16 @@ public class StagingManager {
}
}
+ private String getReasonForRevert() {
+ if (!TextUtils.isEmpty(mFailureReason)) {
+ return mFailureReason;
+ }
+ if (!TextUtils.isEmpty(mNativeFailureReason)) {
+ return "Session reverted due to crashing native process: " + mNativeFailureReason;
+ }
+ return "";
+ }
+
private List<String> findAPKsInDir(File stageDir) {
List<String> ret = new ArrayList<>();
if (stageDir != null && stageDir.exists()) {