dri2: Unblock Clients on Drawable release

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 <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
This commit is contained in:
Chris Wilson 2016-02-03 09:54:46 +00:00 committed by Adam Jackson
parent a722d617a0
commit e43abdce96

View File

@ -413,6 +413,9 @@ DRI2DrawableGone(void *p, XID id)
(*pDraw->pScreen->DestroyPixmap)(pPriv->redirectpixmap);
}
if (pPriv->blockedClient)
AttendClient(pPriv->blockedClient);
free(pPriv);
return Success;