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

Commit 1b4735ab authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Prevent deadlock when releasing VirtualDisplays" into tm-dev am: 1187757c

parents 6a4d2e41 1187757c
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -1440,16 +1440,6 @@ public final class DisplayManagerService extends SystemService {
            DisplayDevice device =
                    mVirtualDisplayAdapter.releaseVirtualDisplayLocked(appToken);
            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.
                mDisplayDeviceRepo.onDisplayDeviceEvent(device,
                        DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED);
@@ -1609,6 +1599,17 @@ public final class DisplayManagerService extends SystemService {
        DisplayManagerGlobal.invalidateLocalDisplayInfoCaches();
        sendDisplayEventLocked(displayId, DisplayManagerGlobal.EVENT_DISPLAY_REMOVED);
        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) {