summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2008-12-15 03:18:13 -0800
committerJeremy Huddleston <jeremyhu@freedesktop.org>2008-12-15 03:20:17 -0800
commita939368ab8140d48c1da4ba0bb229d13b221189c (patch)
treec6b24da6d7632d5d4fe611ebbc30aeb1a88c847d
parentf1c9b5ab230cbb4124d8d476ae4886d05022adcb (diff)
mi: Reuse memory in mieqProcessInputEvents rather than making excessive calls to calloc()
Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com> Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
-rw-r--r--mi/mieq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/mi/mieq.c b/mi/mieq.c
index a19c93979..82bbb2c94 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -312,7 +312,8 @@ mieqProcessInputEvents(void)
312 int x = 0, y = 0; 312 int x = 0, y = 0;
313 int type, nevents, evlen, i; 313 int type, nevents, evlen, i;
314 ScreenPtr screen; 314 ScreenPtr screen;
315 xEvent *event; 315 static xEvent *event = NULL;
316 static size_t event_size = 0;
316 DeviceIntPtr dev = NULL, 317 DeviceIntPtr dev = NULL,
317 master = NULL; 318 master = NULL;
318 319
@@ -322,7 +323,10 @@ mieqProcessInputEvents(void)
322 /* GenericEvents always have nevents == 1 */ 323 /* GenericEvents always have nevents == 1 */
323 nevents = e->nevents; 324 nevents = e->nevents;
324 evlen = (nevents > 1) ? sizeof(xEvent) : e->events->evlen; 325 evlen = (nevents > 1) ? sizeof(xEvent) : e->events->evlen;
325 event = xcalloc(nevents, evlen); 326 if((nevents * evlen) > event_size) {
327 event_size = nevents * evlen;
328 event = (xEvent *)xrealloc(event, event_size);
329 }
326 330
327 if (!event) 331 if (!event)
328 FatalError("[mi] No memory left for event processing.\n"); 332 FatalError("[mi] No memory left for event processing.\n");
@@ -380,8 +384,6 @@ mieqProcessInputEvents(void)
380 master->public.processInputProc(masterEvents->event, master, 384 master->public.processInputProc(masterEvents->event, master,
381 nevents); 385 nevents);
382 } 386 }
383
384 xfree(event);
385 } 387 }
386 388
387 /* Update the sprite now. Next event may be from different device. */ 389 /* Update the sprite now. Next event may be from different device. */