diff options
author | tiger_huang <tiger_huang@htc.com> | 2015-10-01 14:11:27 +0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-07 05:40:41 -0800 |
commit | 03f1d083c5e42fd115b9baea283d5f9db6a27eaf (patch) | |
tree | 87e7eaeddd8411fb5645caf0f500f5762814aa21 /services | |
parent | b082000c8e7679556efa1ed854eb591d6537ba22 (diff) | |
download | frameworks_base-03f1d083c5e42fd115b9baea283d5f9db6a27eaf.zip frameworks_base-03f1d083c5e42fd115b9baea283d5f9db6a27eaf.tar.gz frameworks_base-03f1d083c5e42fd115b9baea283d5f9db6a27eaf.tar.bz2 |
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
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 11 |
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 4e4af62..8be2048 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6234,10 +6234,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; |