[xorg-x11-server] Block signals when removing all input devices #737031
Peter Hutterer
whot at fedoraproject.org
Mon Oct 24 02:49:49 UTC 2011
commit 70574d9ce14c3c7049739372122dab06d7e5588b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Mon Oct 24 12:49:39 2011 +1000
Block signals when removing all input devices #737031
...ix-block-signals-when-closing-all-devices.patch | 46 ++++++++++++++++++++
xorg-x11-server.spec | 8 +++-
2 files changed, 53 insertions(+), 1 deletions(-)
---
diff --git a/0001-dix-block-signals-when-closing-all-devices.patch b/0001-dix-block-signals-when-closing-all-devices.patch
new file mode 100644
index 0000000..b7bdbfb
--- /dev/null
+++ b/0001-dix-block-signals-when-closing-all-devices.patch
@@ -0,0 +1,46 @@
+From 01e37883438b0bedf511f0b56d31943ad2a192f5 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Mon, 24 Oct 2011 12:00:32 +1000
+Subject: [PATCH] dix: block signals when closing all devices
+
+When closing down all devices, we manually unset master for all attached
+devices, but the device's sprite info still points to the master's sprite
+info. This leaves us a window where the master is freed already but the
+device isn't yet. A signal during that window causes dereference of the
+already freed spriteInfo in mieqEnqueue's EnqueueScreen macro.
+
+Simply block signals when removing all devices. It's not like we're really
+worrying about high-responsive input at this stage.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=737031
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ dix/devices.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/dix/devices.c b/dix/devices.c
+index 63454fe..4a525d5 100644
+--- a/dix/devices.c
++++ b/dix/devices.c
+@@ -971,6 +971,8 @@ CloseDownDevices(void)
+ {
+ DeviceIntPtr dev;
+
++ OsBlockSignals();
++
+ /* Float all SDs before closing them. Note that at this point resources
+ * (e.g. cursors) have been freed already, so we can't just call
+ * AttachDevice(NULL, dev, NULL). Instead, we have to forcibly set master
+@@ -993,6 +995,8 @@ CloseDownDevices(void)
+ inputInfo.keyboard = NULL;
+ inputInfo.pointer = NULL;
+ XkbDeleteRulesDflts();
++
++ OsReleaseSignals();
+ }
+
+ /**
+--
+1.7.7
+
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index dca0f06..c2e21a6 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -30,7 +30,7 @@
Summary: X.Org X11 X server
Name: xorg-x11-server
Version: 1.11.1
-Release: 1%{?gitdate:.%{gitdate}}%{dist}
+Release: 2%{?gitdate:.%{gitdate}}%{dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X
@@ -87,6 +87,9 @@ Patch7007: xserver-1.10.99.1-test.patch
# Submitted to upstream but not merged for 1.11
Patch7009: xserver-1.10.99-config-add-udev-systemd-multi-seat-support.patch
+# Bug 737031 - [Crestline] Coredump when doing exit
+Patch7010: 0001-dix-block-signals-when-closing-all-devices.patch
+
%define moduledir %{_libdir}/xorg/modules
%define drimoduledir %{_libdir}/dri
@@ -549,6 +552,9 @@ rm -rf $RPM_BUILD_ROOT
%{xserver_source_dir}
%changelog
+* Mon Oct 24 2011 Peter Hutterer <peter.hutterer at redhat.com> 1.11.1-2
+- Block signals when removing all input devices #737031
+
* Thu Oct 13 2011 Adam Jackson <ajax at redhat.com>
- Drop some Requires >= on things where we had newer versions in F14.
More information about the scm-commits
mailing list