Merge "Prevent deadlock when releasing VirtualDisplays" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-05-05 00:27:16 +00:00
committed by Android (Google) Code Review

View File

@@ -1440,16 +1440,6 @@ public final class DisplayManagerService extends SystemService {
DisplayDevice device = DisplayDevice device =
mVirtualDisplayAdapter.releaseVirtualDisplayLocked(appToken); mVirtualDisplayAdapter.releaseVirtualDisplayLocked(appToken);
if (device != null) { if (device != null) {
final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(device);
if (display != null) {
final int displayId = display.getDisplayIdLocked();
if (mDisplayWindowPolicyControllers.contains(displayId)) {
Pair<IVirtualDevice, DisplayWindowPolicyController> pair =
mDisplayWindowPolicyControllers.removeReturnOld(displayId);
getLocalService(VirtualDeviceManagerInternal.class)
.onVirtualDisplayRemoved(pair.first, displayId);
}
}
// TODO: multi-display - handle virtual displays the same as other display adapters. // TODO: multi-display - handle virtual displays the same as other display adapters.
mDisplayDeviceRepo.onDisplayDeviceEvent(device, mDisplayDeviceRepo.onDisplayDeviceEvent(device,
DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED); DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED);
@@ -1609,6 +1599,17 @@ public final class DisplayManagerService extends SystemService {
DisplayManagerGlobal.invalidateLocalDisplayInfoCaches(); DisplayManagerGlobal.invalidateLocalDisplayInfoCaches();
sendDisplayEventLocked(displayId, DisplayManagerGlobal.EVENT_DISPLAY_REMOVED); sendDisplayEventLocked(displayId, DisplayManagerGlobal.EVENT_DISPLAY_REMOVED);
scheduleTraversalLocked(false); scheduleTraversalLocked(false);
if (mDisplayWindowPolicyControllers.contains(displayId)) {
final IVirtualDevice virtualDevice = mDisplayWindowPolicyControllers.removeReturnOld(
displayId).first;
if (virtualDevice != null) {
mHandler.post(() -> {
getLocalService(VirtualDeviceManagerInternal.class)
.onVirtualDisplayRemoved(virtualDevice, displayId);
});
}
}
} }
private void handleLogicalDisplaySwappedLocked(@NonNull LogicalDisplay display) { private void handleLogicalDisplaySwappedLocked(@NonNull LogicalDisplay display) {