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

Commit bb4aae5c authored by petsjonkin's avatar petsjonkin
Browse files

Moving DisplayPowerController.dump outside syncRoot lock

DisplayPowerController.dump uses handler.runWithScissors that could cause deadlock

Bug: b/366383349, b/339286110, b/346881436
Test: adb shell dumpsys display
Flag: EXEMPT bugfix
Change-Id: Iadfa132a5134104ffd59e598261639b021578311
parent c5d91e7a
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -3377,10 +3377,18 @@ public final class DisplayManagerService extends SystemService {
    private void dumpInternal(PrintWriter pw) {
        pw.println("DISPLAY MANAGER (dumpsys display)");
        BrightnessTracker brightnessTrackerLocal;
        SparseArray<DisplayPowerController> displayPowerControllersLocal = new SparseArray<>();
        int displayPowerControllerCount;

        synchronized (mSyncRoot) {
            brightnessTrackerLocal = mBrightnessTracker;

            displayPowerControllerCount = mDisplayPowerControllers.size();
            for (int i = 0; i < displayPowerControllerCount; i++) {
                displayPowerControllersLocal.put(
                        mDisplayPowerControllers.keyAt(i), mDisplayPowerControllers.valueAt(i));
            }

            pw.println("  mSafeMode=" + mSafeMode);
            pw.println("  mPendingTraversal=" + mPendingTraversal);
            pw.println("  mViewports=" + mViewports);
@@ -3451,13 +3459,6 @@ public final class DisplayManagerService extends SystemService {
                        + ", mWifiDisplayScanRequested=" + callback.mWifiDisplayScanRequested);
            }

            final int displayPowerControllerCount = mDisplayPowerControllers.size();
            pw.println();
            pw.println("Display Power Controllers: size=" + displayPowerControllerCount);
            for (int i = 0; i < displayPowerControllerCount; i++) {
                mDisplayPowerControllers.valueAt(i).dump(pw);
            }

            pw.println();
            mPersistentDataStore.dump(pw);

@@ -3470,6 +3471,12 @@ public final class DisplayManagerService extends SystemService {
                mDisplayWindowPolicyControllers.valueAt(i).second.dump("  ", pw);
            }
        }
        pw.println();
        pw.println("Display Power Controllers: size=" + displayPowerControllerCount);
        for (int i = 0; i < displayPowerControllerCount; i++) {
            displayPowerControllersLocal.valueAt(i).dump(pw);
        }

        if (brightnessTrackerLocal != null) {
            pw.println();
            brightnessTrackerLocal.dump(pw);