xfree86: Hold input_lock across SPRITE functions in VGA arbiter

Avoid scrambling the sprite functions wrapper.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101995
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Keith Packard 2017-08-02 21:34:52 -07:00 committed by Adam Jackson
parent 3265d0c81f
commit cf7517675d
1 changed files with 13 additions and 7 deletions

View File

@ -73,14 +73,20 @@
#define UNWRAP_SCREEN_INFO(x) pScrn->x = pScreenPriv->x
#define SPRITE_PROLOG miPointerScreenPtr PointPriv = \
(miPointerScreenPtr)dixLookupPrivate(&pScreen->devPrivates, \
miPointerScreenKey); VGAarbiterScreenPtr pScreenPriv = \
((VGAarbiterScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, \
VGAarbiterScreenKey)); PointPriv->spriteFuncs = pScreenPriv->miSprite;
#define SPRITE_PROLOG \
miPointerScreenPtr PointPriv; \
VGAarbiterScreenPtr pScreenPriv; \
input_lock(); \
PointPriv = dixLookupPrivate(&pScreen->devPrivates, \
miPointerScreenKey); \
pScreenPriv = dixLookupPrivate(&(pScreen)->devPrivates, \
VGAarbiterScreenKey); \
PointPriv->spriteFuncs = pScreenPriv->miSprite; \
#define SPRITE_EPILOG pScreenPriv->miSprite = PointPriv->spriteFuncs;\
PointPriv->spriteFuncs = &VGAarbiterSpriteFuncs;
#define SPRITE_EPILOG \
pScreenPriv->miSprite = PointPriv->spriteFuncs; \
PointPriv->spriteFuncs = &VGAarbiterSpriteFuncs; \
input_unlock();
#define WRAP_SPRITE do { pScreenPriv->miSprite = PointPriv->spriteFuncs;\
PointPriv->spriteFuncs = &VGAarbiterSpriteFuncs; \