summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2023-06-09 23:27:29 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-06-09 23:27:29 +0000
commit32db01a1a0ceca39c96f66bd47856ed6cae5adf2 (patch)
tree94802bcbbb8206ade06d9b1f4fb7b279bbbb93de
parent632fa893244ce25aab0159850e6d334819b00210 (diff)
parent3ffec4f568318f6cc6fd131f06cbab8099f10b31 (diff)
Merge "Do not reuse the same ProcessRecord if it's not fully gone yet" into udc-dev
-rw-r--r--services/core/java/com/android/server/am/ProcessList.java9
1 files changed, 8 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 86b09ab41ce9..c5776d822c8f 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -2572,9 +2572,14 @@ public final class ProcessList {
// and did the cleanup before the actual death notification. Check the dying processes.
predecessor = mDyingProcesses.get(processName, info.uid);
if (predecessor != null) {
- if (app != null) {
+ // The process record could have existed but its pid is set to 0. In this case,
+ // the 'app' and 'predecessor' could end up pointing to the same instance;
+ // so make sure we check this case here.
+ if (app != null && app != predecessor) {
app.mPredecessor = predecessor;
predecessor.mSuccessor = app;
+ } else {
+ app = null;
}
Slog.w(TAG_PROCESSES, predecessor.toString() + " is attached to a previous process "
+ predecessor.getDyingPid());
@@ -5195,6 +5200,8 @@ public final class ProcessList {
mDyingProcesses.remove(app.processName, app.uid);
app.setDyingPid(0);
handlePrecedingAppDiedLocked(app);
+ // Remove from the LRU list if it's still there.
+ removeLruProcessLocked(app);
return true;
}
return false;