Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73360ab2 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Fix deadlock between activity manager and settings provider

Test: manual
Bug 36028906

Change-Id: I20344608d79d174b468506056789c04d3bde510f
parent 3d19f90c
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -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();
        }
        mHandler.post(() -> {
            registerBroadcastReceivers();
            startWatchingUserRestrictionChanges();
        });
        ServiceManager.addService("settings", new SettingsService(this));
        return true;
    }
+3 −3
Original line number Diff line number Diff line
@@ -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);