mieq: Avoid possible race condition whereby one thread might call mieqEnqueue before InitAndStartDevices finishes

This is more of a hack around the problem.  This is something that will need to be addressed in a
more structured manner with the multi threaded input efforts.
This commit is contained in:
Jeremy Huddleston 2009-01-11 16:10:45 -08:00
parent 6461729647
commit 3c596c061e

View File

@ -248,7 +248,14 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
evt->event->u.keyButtonPointer.time = miEventQueue.lastEventTime;
miEventQueue.lastEventTime = evt->event->u.keyButtonPointer.time;
miEventQueue.events[oldtail].pScreen = EnqueueScreen(pDev);
/* Avoid possible crash when multithreaded and mieqEnqueue is called before
* InitAndStartDevices finishes.
*/
if(pDev && pDev->spriteInfo && pDev->spriteInfo->sprite)
miEventQueue.events[oldtail].pScreen = EnqueueScreen(pDev);
else
miEventQueue.events[oldtail].pScreen = NULL;
miEventQueue.events[oldtail].pDev = pDev;
miEventQueue.lastMotion = isMotion;
@ -399,7 +406,7 @@ mieqProcessInputEvents(void)
/* Custom event handler */
handler = miEventQueue.handlers[type];
if (screen != DequeueScreen(dev) && !handler) {
if (screen && screen != DequeueScreen(dev) && !handler) {
/* Assumption - screen switching can only occur on motion events. */
DequeueScreen(dev) = screen;
x = event->u.keyButtonPointer.rootX;