summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2017-03-17 19:59:02 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-03-17 19:59:06 +0000
commitf87e2344880fde52ec0b619c0bb91fdfb29c0fc4 (patch)
tree3de0a08c4a417c44abe5cb7717f9c21ab985d77d
parent42b0676d616e306c6c5f6325b27b401fc7e32c8c (diff)
parent73360ab2d12645a177e8e3d860dec3407839ad76 (diff)
Merge "Fix deadlock between activity manager and settings provider"
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java10
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerConstants.java6
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);