dix: resize EQ to minimum size to avoid reallocs during SIGIO.
When a new device is added, calculate the event size needed if a DCCE event is sent and set the EQ's event size to this minimum. This avoids reallocs when a event is sent (which may happen during a SIGIO).
This commit is contained in:
parent
fea39c94bc
commit
a0e6a7d4f5
|
@ -249,6 +249,7 @@ EnableDevice(DeviceIntPtr dev)
|
|||
listlen = GetEventList(&evlist);
|
||||
OsBlockSignals();
|
||||
SetMinimumEventSize(evlist, listlen, evsize);
|
||||
mieqResizeEvents(evsize);
|
||||
OsReleaseSignals();
|
||||
|
||||
if ((*prev != dev) || !dev->inited ||
|
||||
|
|
4
mi/mi.h
4
mi/mi.h
|
@ -153,6 +153,10 @@ extern Bool mieqInit(
|
|||
void
|
||||
);
|
||||
|
||||
extern void mieqResize(
|
||||
int /* min_size */
|
||||
);
|
||||
|
||||
extern void mieqEnqueue(
|
||||
DeviceIntPtr /*pDev*/,
|
||||
xEventPtr /*e*/
|
||||
|
|
10
mi/mieq.c
10
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
|
||||
|
|
Loading…
Reference in New Issue
Block a user