summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Ma <kma@google.com>2014-09-26 18:52:24 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-09-26 18:52:25 +0000
commit18037f14e8ee8eea7247c03a9cb27e2a8878fd05 (patch)
tree1fe64a92b5bdfc3e562f29f4476a2551cdc3d4c9
parentf202365ecca0b6ed637f679c8dd3a36ff850ddfe (diff)
parent8174879e091aa2b9b96c026714bd3e5b5f308dff (diff)
downloadframeworks_base-18037f14e8ee8eea7247c03a9cb27e2a8878fd05.zip
frameworks_base-18037f14e8ee8eea7247c03a9cb27e2a8878fd05.tar.gz
frameworks_base-18037f14e8ee8eea7247c03a9cb27e2a8878fd05.tar.bz2
Merge "Revert "Revert "DO NOT MERGE Fix race condition between binder deaths""" into klp-modular-dev
-rw-r--r--services/core/java/com/android/server/wm/AppWindowToken.java9
-rw-r--r--services/core/java/com/android/server/wm/TaskStack.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java4
3 files changed, 13 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index ca4ad8a..4fe37e8 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -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);
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 72b4034..6823577 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -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;
}
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 751919b..2b57f50 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -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)) {