Skip to content

Commit cf32744

Browse files
Jeff BrownThe Android Automerger
authored andcommitted
Fix an NPE and possible unsynchronized call of Locked method.
Bug: 6680398 Change-Id: Id5ef4fa82b2a5ef5e9c3934ca95156143f91e5e2
1 parent e792d52 commit cf32744

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

services/java/com/android/server/wm/InputMonitor.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -87,26 +87,29 @@ public void notifyInputChannelBroken(InputWindowHandle inputWindowHandle) {
8787
public long notifyANR(InputApplicationHandle inputApplicationHandle,
8888
InputWindowHandle inputWindowHandle) {
8989
AppWindowToken appWindowToken = null;
90-
if (inputWindowHandle != null) {
91-
synchronized (mService.mWindowMap) {
92-
WindowState windowState = (WindowState) inputWindowHandle.windowState;
90+
synchronized (mService.mWindowMap) {
91+
WindowState windowState = null;
92+
if (inputWindowHandle != null) {
93+
windowState = (WindowState) inputWindowHandle.windowState;
9394
if (windowState != null) {
94-
Slog.i(WindowManagerService.TAG, "Input event dispatching timed out sending to "
95-
+ windowState.mAttrs.getTitle());
9695
appWindowToken = windowState.mAppToken;
97-
mService.saveANRStateLocked(appWindowToken, windowState);
9896
}
9997
}
100-
}
101-
102-
if (appWindowToken == null && inputApplicationHandle != null) {
103-
appWindowToken = (AppWindowToken)inputApplicationHandle.appWindowToken;
104-
if (appWindowToken != null) {
105-
Slog.i(WindowManagerService.TAG,
106-
"Input event dispatching timed out sending to application "
107-
+ appWindowToken.stringName);
108-
mService.saveANRStateLocked(appWindowToken, null);
98+
if (appWindowToken == null && inputApplicationHandle != null) {
99+
appWindowToken = (AppWindowToken)inputApplicationHandle.appWindowToken;
109100
}
101+
102+
if (windowState != null) {
103+
Slog.i(WindowManagerService.TAG, "Input event dispatching timed out "
104+
+ "sending to " + windowState.mAttrs.getTitle());
105+
} else if (appWindowToken != null) {
106+
Slog.i(WindowManagerService.TAG, "Input event dispatching timed out "
107+
+ "sending to application " + appWindowToken.stringName);
108+
} else {
109+
Slog.i(WindowManagerService.TAG, "Input event dispatching timed out.");
110+
}
111+
112+
mService.saveANRStateLocked(appWindowToken, windowState);
110113
}
111114

112115
if (appWindowToken != null && appWindowToken.appToken != null) {

services/java/com/android/server/wm/WindowManagerService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9860,14 +9860,16 @@ void dumpLastANRLocked(PrintWriter pw) {
98609860
* the time an ANR occurred before anything else in the system changes
98619861
* in response.
98629862
*
9863-
* @param appWindowToken The application that ANR'd, never null.
9863+
* @param appWindowToken The application that ANR'd, may be null.
98649864
* @param windowState The window that ANR'd, may be null.
98659865
*/
98669866
public void saveANRStateLocked(AppWindowToken appWindowToken, WindowState windowState) {
98679867
StringWriter sw = new StringWriter();
98689868
PrintWriter pw = new PrintWriter(sw);
98699869
pw.println(" ANR time: " + DateFormat.getInstance().format(new Date()));
9870-
pw.println(" Application at fault: " + appWindowToken.stringName);
9870+
if (appWindowToken != null) {
9871+
pw.println(" Application at fault: " + appWindowToken.stringName);
9872+
}
98719873
if (windowState != null) {
98729874
pw.println(" Window at fault: " + windowState.mAttrs.getTitle());
98739875
}

0 commit comments

Comments
 (0)