Revert "Revert "DO NOT MERGE Fix race condition between binder deaths""

This reverts commit 04c6d73fd0.

Bug: 17286687
Change-Id: Ic11d1e35198accb5a05cd419f5a522bc39fc789b
This commit is contained in:
Kevin Ma
2014-09-26 18:30:37 +00:00
parent 04c6d73fd0
commit 8174879e09
3 changed files with 13 additions and 2 deletions

View File

@@ -245,6 +245,15 @@ class AppWindowToken extends WindowToken {
return false;
}
void removeAllWindows() {
for (int winNdx = allAppWindows.size() - 1; winNdx >= 0; --winNdx) {
WindowState win = allAppWindows.get(winNdx);
if (WindowManagerService.DEBUG_WINDOW_MOVEMENT) Slog.w(WindowManagerService.TAG,
"removeAllWindows: removing win=" + win);
win.mService.removeWindowLocked(win.mSession, win);
}
}
@Override
void dump(PrintWriter pw, String prefix) {
super.dump(pw, prefix);

View File

@@ -155,7 +155,7 @@ public class TaskStack {
final ArrayList<WindowState> windows = activities.get(activityNdx).allAppWindows;
for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) {
final WindowStateAnimator winAnimator = windows.get(winNdx).mWinAnimator;
if (winAnimator.isAnimating() && !winAnimator.isDummyAnimation()) {
if (winAnimator.isAnimating() || winAnimator.mWin.mExiting) {
return true;
}
}

View File

@@ -3540,7 +3540,7 @@ public class WindowManagerService extends IWindowManager.Stub
return;
}
final Task oldTask = mTaskIdToTask.get(atoken.groupId);
removeAppFromTaskLocked(atoken);
oldTask.removeAppToken(atoken);
atoken.groupId = groupId;
Task newTask = mTaskIdToTask.get(groupId);
@@ -4562,6 +4562,8 @@ public class WindowManagerService extends IWindowManager.Stub
}
void removeAppFromTaskLocked(AppWindowToken wtoken) {
wtoken.removeAllWindows();
final Task task = mTaskIdToTask.get(wtoken.groupId);
if (task != null) {
if (!task.removeAppToken(wtoken)) {