[xorg-x11-drv-evdev] Don't delete the device on ENODEV to avoid free in signal handler

Peter Hutterer whot at fedoraproject.org
Sat Aug 4 06:56:18 UTC 2012


commit 8e470dd9f1db5815d5ffbe39cb85ac09c0332c5d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Sat Aug 4 17:00:34 2012 +1000

    Don't delete the device on ENODEV to avoid free in signal handler

 0001-Don-t-delete-the-device-on-ENODEV.patch |   38 ++++++++++++++++++++++++++
 xorg-x11-drv-evdev.spec                      |    8 +++++-
 2 files changed, 45 insertions(+), 1 deletions(-)
---
diff --git a/0001-Don-t-delete-the-device-on-ENODEV.patch b/0001-Don-t-delete-the-device-on-ENODEV.patch
new file mode 100644
index 0000000..4a9805f
--- /dev/null
+++ b/0001-Don-t-delete-the-device-on-ENODEV.patch
@@ -0,0 +1,38 @@
+From 1660f32f21ba1fa70fa79af1cb59436065a6ba8a Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Tue, 31 Jul 2012 16:39:00 +1000
+Subject: [PATCH evdev] Don't delete the device on ENODEV
+
+This is signal handler code and we cannot clean up properly while in the
+signal handler. So reduce the code to removing the signal handler and let
+the device be cleaned up later.
+
+If hotplugging is on, the server will remove it when the config backend says
+so and if it is off, the server will remove it on shutdown.
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ src/evdev.c |    6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/evdev.c b/src/evdev.c
+index f54b66f..b832d98 100644
+--- a/src/evdev.c
++++ b/src/evdev.c
+@@ -1113,12 +1113,8 @@ EvdevReadInput(InputInfoPtr pInfo)
+         if (len <= 0)
+         {
+             if (errno == ENODEV) /* May happen after resume */
+-            {
+-                EvdevMBEmuFinalize(pInfo);
+-                Evdev3BEmuFinalize(pInfo);
+                 xf86RemoveEnabledDevice(pInfo);
+-                EvdevCloseDevice(pInfo);
+-            } else if (errno != EAGAIN)
++            else if (errno != EAGAIN)
+             {
+                 /* We use X_NONE here because it doesn't alloc */
+                 xf86MsgVerb(X_NONE, 0, "%s: Read error: %s\n", pInfo->name,
+-- 
+1.7.10.4
+
diff --git a/xorg-x11-drv-evdev.spec b/xorg-x11-drv-evdev.spec
index 709f57b..8c579d0 100644
--- a/xorg-x11-drv-evdev.spec
+++ b/xorg-x11-drv-evdev.spec
@@ -8,7 +8,7 @@
 Summary:    Xorg X11 evdev input driver
 Name:       xorg-x11-drv-evdev
 Version:    2.7.2
-Release:    2%{?gitdate:.%{gitdate}git%{gitversion}}%{dist}
+Release:    3%{?gitdate:.%{gitdate}git%{gitversion}}%{dist}
 URL:        http://www.x.org
 License:    MIT
 Group:      User Interface/X Hardware Support
@@ -23,6 +23,8 @@ Source0:    ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2
 
 # Bug 805902 - Scrollwheels on tablets are broken
 Patch02: 0001-Allow-relative-scroll-valuators-on-absolute-devices.patch
+# Only disable device on ENODEV to avoid free in sighandler
+Patch03: 0001-Don-t-delete-the-device-on-ENODEV.patch
 
 ExcludeArch: s390 s390x %{?rhel:ppc ppc64}
 
@@ -42,6 +44,7 @@ X.Org X11 evdev input driver.
 %prep
 %setup -q -n %{tarball}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}}
 %patch02 -p1 -b .relscroll
+%patch03 -p1 -b .enodev
 
 %build
 autoreconf -v --install || exit 1
@@ -83,6 +86,9 @@ X.Org X11 evdev input driver development files.
 
 
 %changelog
+* Sat Aug 04 2012 Peter Hutterer <peter.hutterer at redhat.com> 2.7.2-3
+- Don't delete the device on ENODEV to avoid free in signal handler
+
 * Sat Aug 04 2012 Peter Hutterer <peter.hutterer at redhat.com> 2.7.2-2
 - Add missing changelog message.
 


More information about the scm-commits mailing list