diff options
| author | 2016-10-12 18:35:17 +0900 | |
|---|---|---|
| committer | 2016-10-24 13:30:49 +0900 | |
| commit | 0bd28e2c5f7fd7e4448ae489b425e4e5cee57f9a (patch) | |
| tree | a1ed0d2ff704763099f16b5deec41dca4b1baf9f | |
| parent | 1a02a2683814661fd1fb6ab811fc8f76dc610511 (diff) | |
Avoid NPE around mReusedTask of ActivityStarter
Symptom:
System crash by NPE is observed on ActivityStarter
during phone boot-up.
Detail and sample:
ActivityStarter has possibility to be called itself recursively
by calling TaskRecord$performClearTaskLocked().
Then class variable of mReusedTask is initialized to null
after the call, because the recursive call isn't guarded by
synchronized block.
Then NPE crash occurs on next statement.
Solutions:
Avoid to use the class variable on null possibility statement.
Bug: 32361138
Change-Id: Iaea3e066a6f7134fcae4338ff864bb236241194c
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStarter.java | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 85fa139906dd..32a798b33bcf 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1540,9 +1540,9 @@ class ActivityStarter { == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK)) { // The caller has requested to completely replace any existing task with its new // activity. Well that should not be too hard... + intentActivity.task.performClearTaskLocked(); + intentActivity.task.setIntent(mStartActivity); mReuseTask = intentActivity.task; - mReuseTask.performClearTaskLocked(); - mReuseTask.setIntent(mStartActivity); // When we clear the task - focus will be adjusted, which will bring another task // to top before we launch the activity we need. This will temporary swap their // mTaskToReturnTo values and we don't want to overwrite them accidentally. |