am 8828d86e: DO NOT MERGE Fix race condition between binder deaths

* commit '8828d86e79424fc1c7b7d1f908e3450879d5cea0':
  DO NOT MERGE Fix race condition between binder deaths
This commit is contained in:
Craig Mautner
2014-09-26 01:20:54 +00:00
committed by Android Git Automerger
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);
@@ -4563,6 +4563,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)) {