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

Commit c33648aa authored by wilsonshih's avatar wilsonshih
Browse files

Hold WM lock when add starting window to TaskOrganizer

WM lock will be needed when TaskOrgnaizerController#addStartingWindow
and removeStartingWindow in case of race condition.

Fixes: 185095280
Test: atest ActivityRecordTests
Change-Id: Ifd8f2f09ec6238c906bcde812684a705620424a9
parent cf150a40
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2137,7 +2137,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Add starting %s: startingData=%s",
                    this, startingData);


            WindowManagerPolicy.StartingSurface surface = null;
            try {
                surface = startingData.createStartingSurface(ActivityRecord.this);
+15 −13
Original line number Diff line number Diff line
@@ -58,11 +58,13 @@ public class StartingSurfaceController {
                    overrideConfig, displayId);
        }

        synchronized (mService.mGlobalLock) {
            final Task task = activity.getTask();
        if (task != null && mService.mAtmService.mTaskOrganizerController.addStartingWindow(task,
                activity.token, theme)) {
            if (task != null && mService.mAtmService.mTaskOrganizerController.addStartingWindow(
                    task, activity.token, theme)) {
                return new ShellStartingSurface(task);
            }
        }
        return null;
    }

@@ -124,14 +126,13 @@ public class StartingSurfaceController {
                activity.mDisplayContent.handleTopActivityLaunchingInDifferentOrientation(
                        topFullscreenActivity, false /* checkOpening */);
            }
            if (DEBUG_ENABLE_SHELL_DRAWER) {
                mService.mAtmService.mTaskOrganizerController.addStartingWindow(task,
                        activity.token, 0 /* launchTheme */);
                return new ShellStartingSurface(task);
            }
        if (!DEBUG_ENABLE_SHELL_DRAWER) {
            return mService.mTaskSnapshotController
                    .createStartingSurface(activity, taskSnapshot);
        }
        mService.mAtmService.mTaskOrganizerController.addStartingWindow(task, activity.token,
                0 /* launchTheme */);
        return new ShellStartingSurface(task);
        return mService.mTaskSnapshotController.createStartingSurface(activity, taskSnapshot);
    }


@@ -144,8 +145,9 @@ public class StartingSurfaceController {

        @Override
        public void remove(boolean animate) {
            mService.mAtmService.mTaskOrganizerController.removeStartingWindow(mTask,
                    animate);
            synchronized (mService.mGlobalLock) {
                mService.mAtmService.mTaskOrganizerController.removeStartingWindow(mTask, animate);
            }
        }
    }
}