From 50193a0dd35b6f54499fb76ab68f615237cc51f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rami=20Ylim=C3=A4ki?= Date: Tue, 8 Mar 2011 11:23:45 +0200 Subject: Release leaked XKB options on input device disconnect. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently the XKB options duplicated in EvdevAddKeyClass are never released. For example, connecting and disconnecting a bluetooth keyboard repeatedly causes a steadily growing memory leak. Signed-off-by: Rami Ylimäki Reviewed-by: Erkki Seppälä Signed-off-by: Peter Hutterer --- src/evdev.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/evdev.c b/src/evdev.c index 519a50e..679df38 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1826,6 +1826,18 @@ EvdevOpenDevice(InputInfoPtr pInfo) return Success; } +static void +EvdevUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) +{ + EvdevPtr pEvdev = pInfo ? pInfo->private : NULL; + if (pEvdev) + { + /* Release strings allocated in EvdevAddKeyClass. */ + XkbFreeRMLVOSet(&pEvdev->rmlvo, FALSE); + } + xf86DeleteInput(pInfo, flags); +} + static int EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) { @@ -1897,7 +1909,7 @@ _X_EXPORT InputDriverRec EVDEV = { "evdev", NULL, EvdevPreInit, - NULL, + EvdevUnInit, NULL, evdevDefaults }; -- cgit v1.2.3