Merge "Fix deadlock between activity manager and settings provider"

This commit is contained in:
Makoto Onuki
2017-03-17 19:59:02 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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);