xserver: Branch 'master' - 2 commits

Peter Hutterer whot at kemper.freedesktop.org
Wed Dec 17 16:00:16 PST 2008


 dix/devices.c   |   19 +++++++++++++------
 dix/getevents.c |    2 ++
 2 files changed, 15 insertions(+), 6 deletions(-)

New commits:
commit 08a3d6928c87032998b6113d67f69b79b09eecee
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Dec 16 14:19:12 2008 +1000

    dix: Allocate the space for the DCCE when the last SD is removed.
    
    This still doesn't fix reset the MD's classes (a TODO that's been here for
    ages), but at least we don't segfault anymore when detaching the last SD.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index d1043db..48b6e7d 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2569,21 +2569,28 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
         if (!it)  /* no dev is paired with old master */
         {
             /* XXX: reset to defaults */
-            EventList event = { NULL, 0};
+            EventListPtr event = NULL;
             char* classbuf;
+            int namelen = 0; /* dummy */
+            int len = sizeof(xEvent);
             deviceClassesChangedEvent *dcce;
 
+            event = InitEventList(1);
+            SizeDeviceInfo(oldmaster, &namelen, &len);
+            SetMinimumEventSize(event, 1, len);
+
             /* Send event to clients */
-            CreateClassesChangedEvent(&event, oldmaster, oldmaster);
-            dcce = (deviceClassesChangedEvent*)event.event;
+            CreateClassesChangedEvent(event, oldmaster, oldmaster);
+            dcce = (deviceClassesChangedEvent*)event->event;
             dcce->deviceid = oldmaster->id;
             dcce->num_classes = 0;
-            classbuf = (char*)&event.event[1];
+            dcce->length = (len - sizeof(xEvent))/4;
+            classbuf = (char*)&event->event[1];
             CopySwapClasses(NullClient, oldmaster,
                     &dcce->num_classes, &classbuf);
             SendEventToAllWindows(oldmaster, XI_DeviceClassesChangedMask,
-                    event.event, 1);
-            xfree(event.event);
+                    event->event, 1);
+            FreeEventList(event, 1);
         }
     }
 
commit 689be0cb4b259840208c17f974066a942196793a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Dec 16 14:19:38 2008 +1000

    dix: set the correct length in CreateClassesChangedEvent.
    
    Fallout from aeff14d5f208d02f211b8b2a1a98999624e8c2cf. Yes, we don't malloc
    anymore because we are inside a SIGIO and the memory is already there anyway.
    But we still need to set the event length correctly, otherwise
    mieqEnqueue/mieqProcessInputEvent don't know how much memory to copy.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index 755b494..40d7b84 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -119,6 +119,7 @@ CreateClassesChangedEvent(EventList* event,
     deviceClassesChangedEvent *dcce;
     int len = sizeof(xEvent);
     CARD32 ms = GetTimeInMillis();
+    int namelen = 0; /* dummy */
 
     dcce = (deviceClassesChangedEvent*)event->event;
     dcce->type = GenericEvent;
@@ -126,6 +127,7 @@ CreateClassesChangedEvent(EventList* event,
     dcce->evtype = XI_DeviceClassesChangedNotify;
     dcce->time = ms;
     dcce->new_slave = slave->id;
+    SizeDeviceInfo(slave, &namelen, &len);
     dcce->length = (len - sizeof(xEvent))/4;
 }
 


More information about the xorg-commit mailing list