From 278f2ab11baefa9c298403f7be70e7dfc22cf601 Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Tue, 14 Feb 2017 19:51:33 -0800 Subject: [PATCH] Access IMMS#mSettings only inside the lock This is a preparation CL before addresssing Bug 35361128. IMMS.MyPackageMonitor#isChangingPackagesOfCurrentUser() needs to be called after taking a lock for IMMS#mMethodMap because it internally relies on InputMethodManagerService#mSettings. Test: Made sure that the device can boot and the IME is available. Bug: 35361128 Change-Id: I66752a275f20f6ba33bc211ffb8d6fd269250c0d --- .../android/server/InputMethodManagerService.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 2aa17c0209e1e..101b73834cb62 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -727,7 +727,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mPackagesToMonitorComponentChange.add(packageName); } - private boolean isChangingPackagesOfCurrentUser() { + @GuardedBy("mMethodMap") + private boolean isChangingPackagesOfCurrentUserLocked() { final int userId = getChangingUserId(); final boolean retval = userId == mSettings.getCurrentUserId(); if (DEBUG) { @@ -740,10 +741,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) { - if (!isChangingPackagesOfCurrentUser()) { - return false; - } synchronized (mMethodMap) { + if (!isChangingPackagesOfCurrentUserLocked()) { + return false; + } String curInputMethodId = mSettings.getSelectedInputMethod(); final int N = mMethodList.size(); if (curInputMethodId != null) { @@ -777,10 +778,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public void onSomePackagesChanged() { - if (!isChangingPackagesOfCurrentUser()) { - return; - } synchronized (mMethodMap) { + if (!isChangingPackagesOfCurrentUserLocked()) { + return; + } InputMethodInfo curIm = null; String curInputMethodId = mSettings.getSelectedInputMethod(); final int N = mMethodList.size();