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

Commit 826a2c12 authored by tiger_huang's avatar tiger_huang Committed by Wale Ogunwale
Browse files

Make accessing mWaitingForDrawn thread-safe

mWaitingForDrawn can be accessed by multiple threads, but it was not
protected by the mWindowMap lock perfectly.

Change-Id: I128ba1a00f40af83b051c0d1df4350d0635a9dff
parent bdcc9b77
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -10679,6 +10679,7 @@ public class WindowManagerService extends IWindowManager.Stub

        @Override
        public void waitForAllWindowsDrawn(Runnable callback, long timeout) {
            boolean allWindowsDrawn = false;
            synchronized (mWindowMap) {
                mWaitingForDrawnCallback = callback;
                final WindowList windows = getDefaultWindowListLocked();
@@ -10699,15 +10700,18 @@ public class WindowManagerService extends IWindowManager.Stub
                    }
                }
                mWindowPlacerLocked.requestTraversal();
            }
                mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT);
                if (mWaitingForDrawn.isEmpty()) {
                callback.run();
                    allWindowsDrawn = true;
                } else {
                    mH.sendEmptyMessageDelayed(H.WAITING_FOR_DRAWN_TIMEOUT, timeout);
                    checkDrawnWindowsLocked();
                }
            }
            if (allWindowsDrawn) {
                callback.run();
            }
        }

        @Override
        public void addWindowToken(IBinder token, int type) {