diff options
| author | 2023-06-09 23:27:29 +0000 | |
|---|---|---|
| committer | 2023-06-09 23:27:29 +0000 | |
| commit | 32db01a1a0ceca39c96f66bd47856ed6cae5adf2 (patch) | |
| tree | 94802bcbbb8206ade06d9b1f4fb7b279bbbb93de | |
| parent | 632fa893244ce25aab0159850e6d334819b00210 (diff) | |
| parent | 3ffec4f568318f6cc6fd131f06cbab8099f10b31 (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.java | 9 |
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; |