summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author tiger_huang <tiger_huang@htc.com> 2015-10-01 14:11:27 +0800
committer tiger_huang <tiger_huang@htc.com> 2015-10-01 14:11:27 +0800
commit82c700f53b6afdc14e6ffdd7f7bf201fb1af8f46 (patch)
treef59b97cf2ccc04521a0a36a1b3f8b71d590d3e2a
parent899110f3012eb9ab2056d8ee182d5bdab0ecae19 (diff)
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
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java11
1 files 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 97a38925a8ab..31777e8945d3 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;