xserver: Branch 'mpx'

Peter Hutterer whot at kemper.freedesktop.org
Wed Apr 30 01:42:23 PDT 2008


 dix/devices.c |    1 +
 mi/mi.h       |    4 ++++
 mi/mieq.c     |   10 ++++++++++
 3 files changed, 15 insertions(+)

New commits:
commit a0e6a7d4f507c5c0a0b11adb10394af58a0a6e07
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Wed Apr 30 17:57:48 2008 +0930

    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).

diff --git a/dix/devices.c b/dix/devices.c
index abd3cb6..802bf79 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 842edf3..0af1a1b 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 9f81867..3ab8936 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


More information about the xorg-commit mailing list