xserver: Branch 'master' - 3 commits

Peter Hutterer whot at kemper.freedesktop.org
Tue Dec 9 18:44:14 PST 2008


 dix/getevents.c     |    4 ---
 dix/window.c        |   17 --------------
 include/input.h     |    5 +++-
 include/windowstr.h |    9 -------
 mi/mieq.c           |   62 ++++++++++++++++++++++++++--------------------------
 xkb/ddxDevBtn.c     |   15 ++++++++----
 6 files changed, 45 insertions(+), 67 deletions(-)

New commits:
commit d281866b74f7067f2704c278fe9720eafc0ee5ef
Author: Peter Hutterer <peter.hutterer at redhat.com>
Date:   Mon Dec 1 21:20:48 2008 +1000

    mi: Clean up CopyGetMasterEvent, re-use the memory.
    
    Alloc an EventList once and then re-use instead of allocing a new event each
    time we need a master event.
    There's a trick included: because all the event processing handlers only take
    an xEvent, init a size 1 EventList and squash the events into this one.
    
    Events that have count > 1 must be squished into an xEvent array anyway before
    passing into the event handlers, so we don't lose anything here.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/mi/mieq.c b/mi/mieq.c
index a05c9eb..cb940e4 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -80,6 +80,7 @@ typedef struct _EventQueue {
 } EventQueueRec, *EventQueuePtr;
 
 static EventQueueRec miEventQueue;
+static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
 
 Bool
 mieqInit(void)
@@ -98,6 +99,17 @@ mieqInit(void)
             FatalError("Could not allocate event queue.\n");
         miEventQueue.events[i].events = evlist;
     }
+
+    /* XXX: mE is just 1 event long, if we have Motion + Valuator they are
+     * squashed into the first event to make passing it into the event
+     * processing handlers easier. This should be fixed when the processing
+     * handlers switch to EventListPtr instead of xEvent */
+    masterEvents = InitEventList(1);
+    if (!masterEvents)
+        FatalError("Could not allocated MD event queue.\n");
+    SetMinimumEventSize(masterEvents, 1,
+                        (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
+
     SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
     return TRUE;
 }
@@ -275,28 +287,21 @@ ChangeDeviceID(DeviceIntPtr dev, xEvent* event)
  */
 void
 CopyGetMasterEvent(DeviceIntPtr mdev, xEvent* original,
-                   xEvent** master, int count)
+                   EventListPtr master, int count)
 {
-    if (count > 1) {
-        *master = xcalloc(count, sizeof(xEvent));
-        if (!*master)
-            FatalError("[mi] No memory left for master event.\n");
-        while(count--)
-        {
-            memcpy(&(*master)[count], &original[count], sizeof(xEvent));
-            ChangeDeviceID(mdev, &(*master)[count]);
-        }
-    } else
-    {
-        int len = sizeof(xEvent);
-        if (original->u.u.type == GenericEvent)
-            len += GEV(original)->length * 4;
-        *master = xalloc(len);
-        if (!*master)
-            FatalError("[mi] No memory left for master event.\n");
-        memcpy(*master, original, len);
-        ChangeDeviceID(mdev, *master);
-    }
+    int len = count * sizeof(xEvent);
+
+    /* Assumption: GenericEvents always have count 1 */
+
+    if (GEV(original)->type == GenericEvent)
+        len += GEV(original)->length * 4;
+
+    if (master->evlen < len)
+        SetMinimumEventSize(master, 1, len);
+
+    memcpy(master->event, original, len);
+    while (count--)
+        ChangeDeviceID(mdev, &master->event[count]);
 }
 
 /* Call this from ProcessInputEvents(). */
@@ -308,8 +313,7 @@ mieqProcessInputEvents(void)
     int x = 0, y = 0;
     int type, nevents, evlen, i;
     ScreenPtr screen;
-    xEvent *event,
-           *master_event = NULL;
+    xEvent *event;
     DeviceIntPtr dev = NULL,
                  master = NULL;
 
@@ -358,10 +362,7 @@ mieqProcessInputEvents(void)
         }
         else {
             if (master)
-                CopyGetMasterEvent(master, event,
-                                   &master_event, nevents);
-            else
-                master_event = NULL;
+                CopyGetMasterEvent(master, event, masterEvents, nevents);
 
             /* If someone's registered a custom event handler, let them
              * steal it. */
@@ -370,19 +371,18 @@ mieqProcessInputEvents(void)
                 handler(DequeueScreen(dev)->myNum, event, dev, nevents);
                 if (master)
                     handler(DequeueScreen(master)->myNum,
-                            master_event, master, nevents);
+                            masterEvents->event, master, nevents);
             } else
             {
                 /* process slave first, then master */
                 dev->public.processInputProc(event, dev, nevents);
 
                 if (master)
-                    master->public.processInputProc(master_event, master,
+                    master->public.processInputProc(masterEvents->event, master,
                                                     nevents);
             }
 
             xfree(event);
-            xfree(master_event);
         }
 
         /* Update the sprite now. Next event may be from different device. */
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index b68a28b..585ad19 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -42,13 +42,14 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 extern	int	DeviceValuator;
 
+static EventListPtr masterEvents = NULL;
+
 void
 XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
 {
 int *			devVal;
 INT32 *			evVal;
-xEvent			events[2],
-			*m_events = NULL; /* master dev */
+xEvent			events[2];
 deviceKeyButtonPointer *btn;
 deviceValuator *	val;
 int			x,y;
@@ -107,18 +108,22 @@ DeviceIntPtr		master = NULL;
      * cases, unless dev is both a keyboard and a mouse.
      */
     if (!dev->isMaster && dev->u.master) {
+        if (!masterEvents)
+        {
+            masterEvents = InitEventList(1);
+            SetMinimumEventSize(masterEvents, 1, (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
+        }
         master = dev->u.master;
         if (!IsPointerDevice(master))
             master = GetPairedDevice(dev->u.master);
 
-        CopyGetMasterEvent(master, &events, &m_events, count);
+        CopyGetMasterEvent(master, &events, masterEvents, count);
     }
 
     (*dev->public.processInputProc)((xEventPtr)btn, dev, count);
 
     if (master) {
-        (*master->public.processInputProc)(m_events, master, count);
-        xfree(m_events);
+        (*master->public.processInputProc)(masterEvents->event, master, count);
     }
     return;
 }
commit 0b4fef6337d88ae8ef05b8b73941350a9007565c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Dec 10 11:35:09 2008 +1000

    dix: move MAX_VALUATOR_EVENTS into include/input.h
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index 19e6fa7..f53f3c3 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -62,10 +62,6 @@
 #include "extnsionst.h"
 #include "listdev.h" /* for sizing up DeviceClassesChangedEvent */
 
-/* Maximum number of valuators, divided by six, rounded up, to get number
- * of events. */
-#define MAX_VALUATOR_EVENTS 6
-
 /* Number of motion history events to store. */
 #define MOTION_HISTORY_SIZE 256
 
diff --git a/include/input.h b/include/input.h
index 509ce3c..e14f698 100644
--- a/include/input.h
+++ b/include/input.h
@@ -69,7 +69,10 @@ SOFTWARE.
 #define PtrAccelLightweight     2
 #define PtrAccelDefault         PtrAccelPredictable
 
-#define MAX_VALUATORS 36 /* XXX from comment in dix/getevents.c */
+#define MAX_VALUATORS 36
+/* Maximum number of valuators, divided by six, rounded up, to get number
+ * of events. */
+#define MAX_VALUATOR_EVENTS 6
 
 #define NO_AXIS_LIMITS -1
 
diff --git a/mi/mieq.c b/mi/mieq.c
index aef6fae..a05c9eb 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -93,7 +93,7 @@ mieqInit(void)
         miEventQueue.handlers[i] = NULL;
     for (i = 0; i < QUEUE_SIZE; i++)
     {
-        EventListPtr evlist = InitEventList(7); /* 1 + MAX_VALUATOR_EVENTS */
+        EventListPtr evlist = InitEventList(1 + MAX_VALUATOR_EVENTS);
         if (!evlist)
             FatalError("Could not allocate event queue.\n");
         miEventQueue.events[i].events = evlist;
commit b36c398b11321a908cfe217108b26a32ffc1d850
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Dec 8 16:41:20 2008 +1000

    dix: purge dead device-based window access code.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/window.c b/dix/window.c
index c038799..88ab5e9 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -413,12 +413,6 @@ CreateRootWindow(ScreenPtr pScreen)
         return FALSE;
     }
 
-    pWin->optional->access.perm = NULL;
-    pWin->optional->access.deny = NULL;
-    pWin->optional->access.nperm = 0;
-    pWin->optional->access.ndeny = 0;
-    pWin->optional->access.defaultRule = 0;
-
     pWin->optional->colormap = pScreen->defColormap;
     pWin->optional->visual = pScreen->rootVisual;
 
@@ -832,9 +826,6 @@ DisposeWindowOptional (WindowPtr pWin)
         pWin->optional->deviceCursors = NULL;
     }
 
-    xfree(pWin->optional->access.perm);
-    xfree(pWin->optional->access.deny);
-
     /* Remove generic event mask allocations */
     if (pWin->optional->geMasks)
         gmask = pWin->optional->geMasks->geClients;
@@ -3467,9 +3458,6 @@ CheckWindowOptionalNeed (WindowPtr w)
             pNode = pNode->next;
         }
     }
-    if (optional->access.nperm != 0 ||
-            optional->access.ndeny != 0)
-        return;
 
     if (optional->geMasks != NULL)
         return;
@@ -3530,11 +3518,6 @@ MakeWindowOptional (WindowPtr pWin)
             optional->geMasks->eventMasks[i] = 0;
     }
 
-    optional->access.nperm = 0;
-    optional->access.ndeny = 0;
-    optional->access.perm = NULL;
-    optional->access.deny = NULL;
-    optional->access.defaultRule = 0;
     parentOptional = FindWindowWithOptional(pWin)->optional;
     optional->visual = parentOptional->visual;
     if (!pWin->cursorIsNone)
diff --git a/include/windowstr.h b/include/windowstr.h
index ccd42a7..b39b351 100644
--- a/include/windowstr.h
+++ b/include/windowstr.h
@@ -89,14 +89,6 @@ typedef struct _GenericClientMasks {
     GenericMaskPtr      geClients;
 } GenericClientMasksRec, *GenericClientMasksPtr;
 
-typedef struct _WindowAccessRec {
-    int                  defaultRule;      /* WindowAccessDenyAll */
-    DeviceIntPtr*        perm;
-    int                  nperm;
-    DeviceIntPtr*        deny;
-    int                  ndeny;
-} WindowAccessRec, *WindowAccessPtr;
-
 typedef struct _WindowOpt {
     VisualID		visual;		   /* default: same as parent */
     CursorPtr		cursor;		   /* default: window.cursorNone */
@@ -114,7 +106,6 @@ typedef struct _WindowOpt {
     struct _OtherInputMasks *inputMasks;   /* default: NULL */
     DevCursorList       deviceCursors;     /* default: NULL */
     struct _GenericClientMasks *geMasks;   /* default: NULL */
-    WindowAccessRec     access;
 } WindowOptRec, *WindowOptPtr;
 
 #define BackgroundPixel	    2L


More information about the xorg-commit mailing list