Merge "Prevent deadlock when releasing VirtualDisplays" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1187757cf2
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user