From 82c700f53b6afdc14e6ffdd7f7bf201fb1af8f46 Mon Sep 17 00:00:00 2001 From: tiger_huang Date: Thu, 1 Oct 2015 14:11:27 +0800 Subject: [PATCH] Make accessing mInputMethodTarget thread-safe Use the lock to prevent other threads clearing mInputMethodTarget while we are accessing members of mInputMethodTarget, or it will cause system server crash due to unexpected NullPointerException. Change-Id: Iec3bed916a019827364ddaf63a89270a4c407a47 --- .../com/android/server/wm/WindowManagerService.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 97a38925a8ab2..31777e8945d32 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6185,10 +6185,13 @@ public class WindowManagerService extends IWindowManager.Stub int retryCount = 0; WindowState appWin = null; - final boolean appIsImTarget = mInputMethodTarget != null - && mInputMethodTarget.mAppToken != null - && mInputMethodTarget.mAppToken.appToken != null - && mInputMethodTarget.mAppToken.appToken.asBinder() == appToken; + boolean appIsImTarget; + synchronized(mWindowMap) { + appIsImTarget = mInputMethodTarget != null + && mInputMethodTarget.mAppToken != null + && mInputMethodTarget.mAppToken.appToken != null + && mInputMethodTarget.mAppToken.appToken.asBinder() == appToken; + } final int aboveAppLayer = (mPolicy.windowTypeToLayerLw(TYPE_APPLICATION) + 1) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET;