From aeff14d5f208d02f211b8b2a1a98999624e8c2cf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 25 Nov 2008 20:23:50 +1000 Subject: 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 --- Xi/exevents.c | 7 ++++++- dix/getevents.c | 19 ------------------- 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; -- cgit v1.2.3