summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2021-11-11 12:16:58 -0800
committer Jing Ji <jji@google.com> 2021-11-11 12:16:58 -0800
commitb22de4e632784b339c8eafd4298deee57e8c7be8 (patch)
tree4dab57781dc914ea349bbf1250028e87c311c1de
parenteb7f4c076f47df186cf21f8de0e4150e34e431df (diff)
Fix race conditions in removing dying process record
While waiting for the death of a process, if its subsequent process record is created and killed immediately, we may end up removing the former process record from the dying process list. Bug: 201305599 Test: Presubmit Change-Id: Ib62a3644d927881d7dab577b625460239e54b434
-rw-r--r--services/core/java/com/android/server/am/ProcessList.java3
1 files changed, 2 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 ca32e08dcdde..0df19ba43e4e 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -5143,7 +5143,8 @@ public final class ProcessList {
}
Watchdog.getInstance().processDied(app.processName, app.getPid());
- if (app.getDeathRecipient() == null) {
+ if (app.getDeathRecipient() == null
+ && mDyingProcesses.get(app.processName, app.uid) == app) {
// If we've done unlinkDeathRecipient before calling into this, remove from dying list.
mDyingProcesses.remove(app.processName, app.uid);
app.setDyingPid(0);