Merge "Revert "Revert "DO NOT MERGE Fix race condition between binder deaths""" into klp-modular-dev

This commit is contained in:
Kevin Ma
2014-09-26 18:52:24 +00:00
committed by Android (Google) Code Review
3 changed files with 13 additions and 2 deletions

View File

@@ -245,6 +245,15 @@ class AppWindowToken extends WindowToken {
return false; 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 @Override
void dump(PrintWriter pw, String prefix) { void dump(PrintWriter pw, String prefix) {
super.dump(pw, prefix); super.dump(pw, prefix);

View File

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

View File

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