From 1d7919a7eb38a94304e6c0bcb09f743fc6191a58 Mon Sep 17 00:00:00 2001 From: riddle_hsu Date: Wed, 11 Mar 2015 17:09:50 +0800 Subject: [PATCH] [ActivityManager] Fix index OOB when resetting removed task Assume task T has an activity X lives in process P. When P is died and before death recipient being called, start activity with flag RESET_TASK_IF_NEEDED to bring the existed task T. Then scheduleResumeActivity IPC will fail and trigger start a new process that removes task T. That results resetTaskIfNeededLocked cannot find the task when continuing the start flow. Detail: https://code.google.com/p/android/issues/detail?id=159558 Change-Id: Icc400c7a6c481a3f78657e9fb83cf0c3a17dde68 --- .../core/java/com/android/server/am/ActivityStack.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 399566af2afd4..033b8e9cf19a9 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2477,9 +2477,11 @@ final class ActivityStack { } int taskNdx = mTaskHistory.indexOf(task); - do { - taskTop = mTaskHistory.get(taskNdx--).getTopActivity(); - } while (taskTop == null && taskNdx >= 0); + if (taskNdx >= 0) { + do { + taskTop = mTaskHistory.get(taskNdx--).getTopActivity(); + } while (taskTop == null && taskNdx >= 0); + } if (topOptions != null) { // If we got some ActivityOptions from an activity on top that