[PATCH 1/2] dix: don't overwrite proximity/focus classes

Peter Hutterer peter.hutterer at who-t.net
Wed May 8 21:30:49 PDT 2013


InitPointerClassDeviceStruct/InitKeyboardDeviceStruct allocate a
proximity/focus class, respectively. If a driver calls
InitFocusClassDeviceStruct or InitProximityClassDeviceStruct beforehand,
the previously allocated class is overwritten, leaking the memory.

Neither takes a parameter other than the device, so we can simply skip
initialising it if we already have one.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/devices.c | 2 +-
 xkb/xkbInit.c | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/dix/devices.c b/dix/devices.c
index 138ed25..3188fb7 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1366,7 +1366,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
     valc->numMotionEvents = numMotionEvents;
     valc->motionHintWindow = NullWindow;
 
-    if (mode & OutOfProximity)
+    if ((mode & OutOfProximity) && !dev->proximity)
         InitProximityClassDeviceStruct(dev);
 
     dev->valuator = valc;
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 4e8e267..ed01114 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -574,7 +574,8 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
     XkbUpdateActions(dev, xkb->min_key_code, XkbNumKeys(xkb), &changes,
                      &check, &cause);
 
-    InitFocusClassDeviceStruct(dev);
+    if (!dev->focus)
+        InitFocusClassDeviceStruct(dev);
 
     xkbi->kbdProc = ctrl_func;
     dev->kbdfeed->BellProc = bell_func;
-- 
1.8.1.4



More information about the xorg-devel mailing list