summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index dded1ca93270..ded205e5eafd 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -6192,11 +6192,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
synchronized (mGlobalLockWithoutBoost) {
final WindowProcessController proc = mProcessNames.remove(name, uid);
if (proc != null && !mStartingProcessActivities.isEmpty()) {
- for (int i = mStartingProcessActivities.size() - 1; i >= 0; i--) {
- final ActivityRecord r = mStartingProcessActivities.get(i);
+ // Use a copy in case finishIfPossible changes the list indirectly.
+ final ArrayList<ActivityRecord> activities =
+ new ArrayList<>(mStartingProcessActivities);
+ for (int i = activities.size() - 1; i >= 0; i--) {
+ final ActivityRecord r = activities.get(i);
if (uid == r.info.applicationInfo.uid && name.equals(r.processName)) {
Slog.w(TAG, proc + " is removed with pending start " + r);
- mStartingProcessActivities.remove(i);
+ mStartingProcessActivities.remove(r);
// If visible, finish it to avoid getting stuck on screen.
if (r.isVisibleRequested()) {
r.finishIfPossible("starting-proc-removed", false /* oomAdj */);