dix: Allocate device privates separate from devices

This will allow device privates to be resized.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Keith Packard 2012-07-05 11:31:29 -07:00
parent f38b2b6283
commit 493ad83323

View File

@ -246,13 +246,17 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
if (devid >= MAXDEVICES) if (devid >= MAXDEVICES)
return (DeviceIntPtr) NULL; return (DeviceIntPtr) NULL;
dev = dev = calloc(1,
_dixAllocateObjectWithPrivates(sizeof(DeviceIntRec) + sizeof(DeviceIntRec) +
sizeof(SpriteInfoRec), sizeof(SpriteInfoRec));
sizeof(DeviceIntRec) + if (!dev)
sizeof(SpriteInfoRec), return (DeviceIntPtr) NULL;
offsetof(DeviceIntRec, devPrivates),
PRIVATE_DEVICE); if (!dixAllocatePrivates(&dev->devPrivates, PRIVATE_DEVICE)) {
free(dev);
return NULL;
}
if (!dev) if (!dev)
return (DeviceIntPtr) NULL; return (DeviceIntPtr) NULL;
@ -282,6 +286,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
/* security creation/labeling check /* security creation/labeling check
*/ */
if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixCreateAccess)) { if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixCreateAccess)) {
dixFreePrivates(dev->devPrivates, PRIVATE_DEVICE);
free(dev); free(dev);
return NULL; return NULL;
} }
@ -961,7 +966,8 @@ CloseDevice(DeviceIntPtr dev)
free(dev->last.touches[j].valuators); free(dev->last.touches[j].valuators);
free(dev->last.touches); free(dev->last.touches);
dev->config_info = NULL; dev->config_info = NULL;
dixFreeObjectWithPrivates(dev, PRIVATE_DEVICE); dixFreePrivates(dev->devPrivates, PRIVATE_DEVICE);
free(dev);
} }
/** /**