diff --git a/dix/devices.c b/dix/devices.c index abd3cb6d2..802bf79d0 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -249,6 +249,7 @@ EnableDevice(DeviceIntPtr dev) listlen = GetEventList(&evlist); OsBlockSignals(); SetMinimumEventSize(evlist, listlen, evsize); + mieqResizeEvents(evsize); OsReleaseSignals(); if ((*prev != dev) || !dev->inited || diff --git a/mi/mi.h b/mi/mi.h index 842edf319..0af1a1bd3 100644 --- a/mi/mi.h +++ b/mi/mi.h @@ -153,6 +153,10 @@ extern Bool mieqInit( void ); +extern void mieqResize( + int /* min_size */ +); + extern void mieqEnqueue( DeviceIntPtr /*pDev*/, xEventPtr /*e*/ diff --git a/mi/mieq.c b/mi/mieq.c index 9f818677b..3ab893650 100644 --- a/mi/mieq.c +++ b/mi/mieq.c @@ -102,6 +102,16 @@ mieqInit(void) return TRUE; } +/* Ensure all events in the EQ are at least size bytes. */ +Bool +mieqResizeEvents(int min_size) +{ + int i; + + for (i = 0; i < QUEUE_SIZE; i++) + SetMinimumEventSize(miEventQueue.events[i].events, 7, min_size); +} + /* * Must be reentrant with ProcessInputEvents. Assumption: mieqEnqueue * will never be interrupted. If this is called from both signal