summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2011-10-20 12:34:36 -0700
committerChristopher Tate <ctate@google.com>2011-10-20 12:34:36 -0700
commit05e9c65a53002e39306a0581310b4b0fceed7433 (patch)
tree4bb764dfbc328716b20e89d3e49094c3afc5287c /services
parentee00c0541e8f066550dcbd5bc8af257fce8d7944 (diff)
downloadframeworks_base-05e9c65a53002e39306a0581310b4b0fceed7433.zip
frameworks_base-05e9c65a53002e39306a0581310b4b0fceed7433.tar.gz
frameworks_base-05e9c65a53002e39306a0581310b4b0fceed7433.tar.bz2
Don't inappropriately kill ANRing drop recipients
If an app takes the 5-second ANR timeout before responding to a drop, but then recovers, we were inappropriately throwing an exception back at it for having acknowledged the drop after we'd abandoned the operation out from under it. Now we let such responses slide without taking any punitive action: the app is still okay, and the drag/drop operation was cleanly terminated already anyway. Bug 5045618 Change-Id: I0b7e76c61f0f8c97e41280b542a470a7d3c8d86f
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/wm/Session.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/services/java/com/android/server/wm/Session.java b/services/java/com/android/server/wm/Session.java
index 03b7546..ee62a56 100644
--- a/services/java/com/android/server/wm/Session.java
+++ b/services/java/com/android/server/wm/Session.java
@@ -306,7 +306,15 @@ final class Session extends IWindowSession.Stub
synchronized (mService.mWindowMap) {
long ident = Binder.clearCallingIdentity();
try {
- if (mService.mDragState == null || mService.mDragState.mToken != token) {
+ if (mService.mDragState == null) {
+ // Most likely the drop recipient ANRed and we ended the drag
+ // out from under it. Log the issue and move on.
+ Slog.w(WindowManagerService.TAG, "Drop result given but no drag in progress");
+ return;
+ }
+
+ if (mService.mDragState.mToken != token) {
+ // We're in a drag, but the wrong window has responded.
Slog.w(WindowManagerService.TAG, "Invalid drop-result claim by " + window);
throw new IllegalStateException("reportDropResult() by non-recipient");
}