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>
This commit is contained in:
		
							parent
							
								
									fb2a8d0e59
								
							
						
					
					
						commit
						aeff14d5f2
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue