Fix the leak while remove the taskFragment

ConcurrentModificationException is thrown from the ForEach function
while dealing with the dead process.  Task vanished event is sent
when remove task fragments and it updates the organized taskFragments
list at the same time.

Bug: 194728551
Test: - Launch activity to split and adb shell am force-stop process
Change-Id: I3a888def3337417565178407f13019f751bca017
This commit is contained in:
Jeff Chang
2021-07-27 23:31:29 +08:00
parent 8c67d4c735
commit f040934611

View File

@@ -116,8 +116,11 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
}
void dispose() {
mOrganizedTaskFragments.forEach(TaskFragment::removeImmediately);
mOrganizedTaskFragments.clear();
while (!mOrganizedTaskFragments.isEmpty()) {
final TaskFragment taskFragment = mOrganizedTaskFragments.get(0);
taskFragment.removeImmediately();
mOrganizedTaskFragments.remove(taskFragment);
}
mOrganizer.asBinder().unlinkToDeath(this, 0 /*flags*/);
}