The original code here is silly. Just allocate an event on the stack and swap into that instead of forcing an ever-growing array into the heap.
Signed-off-by: Adam Jackson <a...@redhat.com> --- dix/events.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/dix/events.c b/dix/events.c index cc26ba5..fd3434f 100644 --- a/dix/events.c +++ b/dix/events.c @@ -266,9 +266,6 @@ static struct DeviceEventTime { */ #define RootWindow(sprite) sprite->spriteTrace[0] -static xEvent *swapEvent = NULL; -static int swapEventLen = 0; - void NotImplemented(xEvent *from, xEvent *to) { @@ -5897,7 +5894,6 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events) #ifdef PANORAMIX xEvent eventCopy; #endif - xEvent *eventTo, *eventFrom; int i, eventlength = sizeof(xEvent); if (!pClient || pClient == serverClient || pClient->clientGone) @@ -5972,25 +5968,16 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events) } if (pClient->swapped) { - if (eventlength > swapEventLen) { - swapEventLen = eventlength; - swapEvent = realloc(swapEvent, swapEventLen); - if (!swapEvent) { - FatalError("WriteEventsToClient: Out of memory.\n"); - return; - } - } - for (i = 0; i < count; i++) { - eventFrom = &events[i]; - eventTo = swapEvent; + xEvent swapped; + memset(&swapped, 0, sizeof swapped); /* Remember to strip off the leading bit of type in case this event was sent with "SendEvent." */ - (*EventSwapVector[eventFrom->u.u.type & 0177]) - (eventFrom, eventTo); + (*EventSwapVector[events[i].u.u.type & 0177]) + (&events[i], &swapped); - WriteToClient(pClient, eventlength, eventTo); + WriteToClient(pClient, eventlength, &swapped); } } else { -- 2.9.3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel