On Wed, Feb 03, 2016 at 09:54:46AM +0000, Chris Wilson wrote:
> If the Window is destroyed by another client, such as the window
> manager, the original client may be blocked by DRI2 awaiting a vblank
> event. When this happens, DRI2DrawableGone forgets to unblock that
> client and so the wait never completes.
> 
> Note Present/xshmfence is also suspectible to this race.
> 
> Testcase: dri2-race/manager
> Signed-off-by: Chris Wilson <[email protected]>
> Cc: Ville Syrjälä <[email protected]>

Reviewed-by: Ville Syrjälä <[email protected]>

> ---
>  hw/xfree86/dri2/dri2.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
> index 2f05c64..80a601e 100644
> --- a/hw/xfree86/dri2/dri2.c
> +++ b/hw/xfree86/dri2/dri2.c
> @@ -416,6 +416,9 @@ DRI2DrawableGone(void *p, XID id)
>          (*pDraw->pScreen->DestroyPixmap)(pPriv->redirectpixmap);
>      }
>  
> +    if (pPriv->blockedClient)
> +        AttendClient(pPriv->blockedClient);
> +
>      free(pPriv);
>  
>      return Success;
> -- 
> 2.7.0

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to