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;