Block signals when removing all input devices #737031

This commit is contained in:
Peter Hutterer 2011-10-24 12:49:39 +10:00
parent 5e795c87f3
commit 70574d9ce1
2 changed files with 53 additions and 1 deletions

View File

@ -0,0 +1,46 @@
From 01e37883438b0bedf511f0b56d31943ad2a192f5 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@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@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

View File

@ -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@redhat.com> 1.11.1-2
- Block signals when removing all input devices #737031
* Thu Oct 13 2011 Adam Jackson <ajax@redhat.com>
- Drop some Requires >= on things where we had newer versions in F14.