diff options
| author | Makoto Onuki <omakoto@google.com> | 2017-03-17 19:59:02 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-03-17 19:59:06 +0000 |
| commit | f87e2344880fde52ec0b619c0bb91fdfb29c0fc4 (patch) | |
| tree | 3de0a08c4a417c44abe5cb7717f9c21ab985d77d | |
| parent | 42b0676d616e306c6c5f6325b27b401fc7e32c8c (diff) | |
| parent | 73360ab2d12645a177e8e3d860dec3407839ad76 (diff) | |
Merge "Fix deadlock between activity manager and settings provider"
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerConstants.java | 6 |
2 files changed, 11 insertions, 5 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 91a4e792bbb8..1f1c18976edf 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -248,6 +248,9 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") private HandlerThread mHandlerThread; + @GuardedBy("mLock") + private Handler mHandler; + // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; @@ -300,10 +303,13 @@ public class SettingsProvider extends ContentProvider { mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); + mHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); } - registerBroadcastReceivers(); - startWatchingUserRestrictionChanges(); + mHandler.post(() -> { + registerBroadcastReceivers(); + startWatchingUserRestrictionChanges(); + }); ServiceManager.addService("settings", new SettingsService(this)); return true; } diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java index 100d8212eacc..df250b19beba 100644 --- a/services/core/java/com/android/server/am/ActivityManagerConstants.java +++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java @@ -105,16 +105,16 @@ final class ActivityManagerConstants extends ContentObserver { } private void updateConstants() { + final String setting = Settings.Global.getString(mResolver, + Settings.Global.ACTIVITY_MANAGER_CONSTANTS); synchronized (mService) { try { - mParser.setString(Settings.Global.getString(mResolver, - Settings.Global.ACTIVITY_MANAGER_CONSTANTS)); + mParser.setString(setting); } catch (IllegalArgumentException e) { // Failed to parse the settings string, log this and move on // with defaults. Slog.e("ActivityManagerConstants", "Bad activity manager config settings", e); } - ENFORCE_BG_CHECK = mParser.getBoolean(KEY_ENFORCE_BG_CHECK, DEFAULT_ENFORCE_BG_CHECK); MAX_CACHED_PROCESSES = mParser.getInt(KEY_MAX_CACHED_PROCESSES, DEFAULT_MAX_CACHED_PROCESSES); |
