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
This commit is contained in:
wilsonshih
2021-04-13 15:14:14 +08:00
parent cf150a40ea
commit c33648aae0
2 changed files with 15 additions and 14 deletions

View File

@@ -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);

View File

@@ -58,10 +58,12 @@ public class StartingSurfaceController {
overrideConfig, displayId);
}
final Task task = activity.getTask();
if (task != null && mService.mAtmService.mTaskOrganizerController.addStartingWindow(task,
activity.token, theme)) {
return new ShellStartingSurface(task);
synchronized (mService.mGlobalLock) {
final Task task = activity.getTask();
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);
}
}
}
}