From 750d70267679ddee10590c80ec621d890bd3d4a7 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sun, 3 Feb 2008 10:25:15 +1030 Subject: [PATCH] dix: Ensure enough memory for ClassesChangedEvent for a new device. Before we enable the device through the driver, we size it up and make sure that the events in the event list contain enough bytes for a possible ClassesChangedEvent lateron. --- dix/devices.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dix/devices.c b/dix/devices.c index 0ffc798e8..38466f889 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -206,6 +206,10 @@ EnableDevice(DeviceIntPtr dev) DeviceIntRec dummyDev; DeviceIntPtr other; devicePresenceNotify ev; + int namelen = 0; /* dummy */ + int evsize = sizeof(xEvent); + int listlen; + EventListPtr evlist; for (prev = &inputInfo.off_devices; *prev && (*prev != dev); @@ -238,6 +242,18 @@ EnableDevice(DeviceIntPtr dev) } } + /* Before actually enabling the device, we need to make sure the event + * list's events have enough memory for a ClassesChangedEvent from the + * device + */ + + SizeDeviceInfo(dev, &namelen, &evsize); + + listlen = GetEventList(&evlist); + OsBlockSignals(); + SetMinimumEventSize(evlist, listlen, evsize); + OsReleaseSignals(); + if ((*prev != dev) || !dev->inited || ((ret = (*dev->deviceProc)(dev, DEVICE_ON)) != Success)) { ErrorF("[dix] couldn't enable device %d\n", dev->id);