summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@redhat.com>2008-11-25 20:23:50 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2008-12-12 11:43:32 +1000
commitaeff14d5f208d02f211b8b2a1a98999624e8c2cf (patch)
tree1b62a70400d9c02e6db74c4d6d9fb6eba053f895
parentfb2a8d0e59a3d187255538f6add22ec67551507a (diff)
dix: don't alloc in ChangeMasterDeviceClasses.
We mustn't realloc as we are inside a signal handler. With SetMinimumEventSize, this code should never be hit anyway, as the event list should have the required memory before this code is hit. Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
-rw-r--r--Xi/exevents.c7
-rw-r--r--dix/getevents.c19
2 files changed, 6 insertions, 20 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 4c846eb7d..6a1f1bb15 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -753,6 +753,8 @@ ChangeMasterDeviceClasses(DeviceIntPtr device,
{
DeviceIntPtr master = device->u.master;
char* classbuff;
+ int len = sizeof(xEvent);
+ int namelen = 0; /* dummy */
if (device->isMaster)
return;
@@ -763,11 +765,14 @@ ChangeMasterDeviceClasses(DeviceIntPtr device,
dcce->deviceid = master->id;
dcce->num_classes = 0;
+ SizeDeviceInfo(device, &namelen, &len);
+ dcce->length = (len - sizeof(xEvent))/4;
+
master->public.devicePrivate = device->public.devicePrivate;
DeepCopyDeviceClasses(device, master);
- /* event is already correct size, see comment in GetPointerEvents */
+ /* event is already correct size, see SetMinimumEventSize */
classbuff = (char*)&dcce[1];
/* we don't actually swap if there's a NullClient, swapping is done
diff --git a/dix/getevents.c b/dix/getevents.c
index 2c47849be..755b494c6 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -119,25 +119,6 @@ CreateClassesChangedEvent(EventList* event,
deviceClassesChangedEvent *dcce;
int len = sizeof(xEvent);
CARD32 ms = GetTimeInMillis();
- int namelen = 0; /* dummy */
-
- /* XXX: ok, this is a bit weird. We need to alloc enough size for the
- * event so it can be filled in in POE lateron. Reason being that if
- * we realloc the event in POE we can get SIGABRT when we try to free
- * or realloc the original pointer.
- * We can only do it here as we don't have the EventList in the event
- * processing any more.
- */
- SizeDeviceInfo(slave, &namelen, &len);
-
- if (event->evlen < len)
- {
- event->event = realloc(event->event, len);
- if (!event->event)
- FatalError("[dix] Cannot allocate memory for "
- "DeviceClassesChangedEvent.\n");
- event->evlen = len;
- }
dcce = (deviceClassesChangedEvent*)event->event;
dcce->type = GenericEvent;