Bug 1683853

Summary: Xorg: UnmapWindow fails to clear underlay clips when overlays are enabled
Product: Red Hat Enterprise Linux 7 Reporter: Aaron Plattner <aplattner>
Component: xorg-x11-serverAssignee: Adam Jackson <ajax>
Status: CLOSED WONTFIX QA Contact: Desktop QE <desktop-qa-list>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 7.6CC: ddadap
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-03-15 07:33:40 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Aaron Plattner 2019-02-28 00:43:53 UTC
Description of problem:

The patch 0001-composite-Implement-backing-store-Always.patch that is applied to RHEL's xorg-x11-server package introduces a problem when overlays are enabled that causes windows being unmapped to remain visible on the screen, and to clip away rendering of sibling windows.

The problem occurs because the patch replaces an assignment
  pWin->valdata = UnmapValData;
with a function call:
  (*pScreen->MarkWindow) (pWin);

This works fine when overlays are not enabled because miMarkWindow doesn't care about this particular value of pWin->valdata. However, when overlays are enabled, pScreen->MarkWindow is actually miOverlayMarkWindow, which does care. When pChild->valdata is not UnmapValData, this function skips setting underlayMarked to TRUE, which causes a subsequent call to miOverlayValidateTree to skip updating the underlay clip list. This causes new windows being mapped later to be clipped against the clip list of windows that were previously unmapped.


Version-Release number of selected component (if applicable):
xorg-x11-server-Xorg-1.20.1-5.2.el7_6.x86_64

How reproducible:
100%

Steps to Reproduce:
1. Install an NVIDIA Quadro GPU and the NVIDIA driver.
2. Configure the X server to use overlays, e.g. with "nvidia-xconfig --overlay"
3. Start an X server.
4. Start a window manager and run an application that creates a top-level window that is not in the overlay. E.g. xlogo.
5. Kill xlogo. 
6. Start another copy of xlogo and drag it around the screen.

Actual results:
At step 5, the first xlogo window does not disappear. At step 6, the second window is clipped against the region where the first xlogo used to be.

Expected results:
The first xlogo window should disappear when unmapped in step 5.

Additional info:
I believe we saw this problem originally in https://bugzilla.redhat.com/show_bug.cgi?id=1484125 , but chalked it up to an ABI breakage and didn't dig far enough into the root cause.

Comment 4 RHEL Program Management 2021-03-15 07:33:40 UTC
After evaluating this issue, there are no plans to address it further or fix it in an upcoming release.  Therefore, it is being closed.  If plans change such that this issue will be fixed in an upcoming release, then the bug can be reopened.