Merge "Fix deadlock between activity manager and settings provider"
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user