[gtk3/f16] Try to fix XI2 related crashes
Matthias Clasen
mclasen at fedoraproject.org
Wed Nov 30 05:19:30 UTC 2011
commit 6fd0e72b4d7858a35aed8ee6463d505aca578d60
Author: Matthias Clasen <mclasen at redhat.com>
Date: Wed Nov 30 00:19:03 2011 -0500
Try to fix XI2 related crashes
...sh-error-traps-around-XIQueryDevice-calls.patch | 94 ++++++++++++++++++++
gtk3.spec | 6 ++
2 files changed, 100 insertions(+), 0 deletions(-)
---
diff --git a/0001-XI2-Push-error-traps-around-XIQueryDevice-calls.patch b/0001-XI2-Push-error-traps-around-XIQueryDevice-calls.patch
new file mode 100644
index 0000000..fb2f294
--- /dev/null
+++ b/0001-XI2-Push-error-traps-around-XIQueryDevice-calls.patch
@@ -0,0 +1,94 @@
+From 9b967ab8aff46b79494d75a3129fa8780545ecd1 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen at redhat.com>
+Date: Wed, 30 Nov 2011 00:16:43 -0500
+Subject: [PATCH] XI2: Push error traps around XIQueryDevice calls
+
+This may help against the crashes at resume time that some
+people have been hitting when input devices mysteriously
+disappear.
+---
+ gdk/x11/gdkdevice-xi2.c | 7 +++++--
+ gdk/x11/gdkdevicemanager-xi2.c | 30 ++++++++++++++++++++----------
+ 2 files changed, 25 insertions(+), 12 deletions(-)
+
+diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
+index b86d802..9eecb3c 100644
+--- a/gdk/x11/gdkdevice-xi2.c
++++ b/gdk/x11/gdkdevice-xi2.c
+@@ -192,10 +192,12 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
+
+ display = gdk_device_get_display (device);
+
++ gdk_x11_display_error_trap_push (display);
+ info = XIQueryDevice (GDK_DISPLAY_XDISPLAY (display),
+ device_xi2->device_id, &ndevices);
++ gdk_x11_display_error_trap_pop_ignored (display);
+
+- for (i = 0, j = 0; i < info->num_classes; i++)
++ for (i = 0, j = 0; info && i < info->num_classes; i++)
+ {
+ XIAnyClassInfo *class_info = info->classes[i];
+ GdkAxisUse use;
+@@ -234,7 +236,8 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
+ j++;
+ }
+
+- XIFreeDeviceInfo (info);
++ if (info)
++ XIFreeDeviceInfo (info);
+ }
+
+ if (mask)
+diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
+index c921ce0..afa9f54 100644
+--- a/gdk/x11/gdkdevicemanager-xi2.c
++++ b/gdk/x11/gdkdevicemanager-xi2.c
+@@ -586,9 +586,14 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
+ {
+ if (ev->info[i].flags & XIDeviceEnabled)
+ {
++ gdk_x11_display_error_trap_push (display);
+ info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
+- add_device (device_manager, &info[0], TRUE);
+- XIFreeDeviceInfo (info);
++ gdk_x11_display_error_trap_pop_ignored (display);
++ if (info)
++ {
++ add_device (device_manager, &info[0], TRUE);
++ XIFreeDeviceInfo (info);
++ }
+ }
+ else if (ev->info[i].flags & XIDeviceDisabled)
+ remove_device (device_manager, ev->info[i].deviceid);
+@@ -614,15 +619,20 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
+ /* Add new master if it's an attachment event */
+ if (ev->info[i].flags & XISlaveAttached)
+ {
++ gdk_x11_display_error_trap_push (display);
+ info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
+-
+- master = g_hash_table_lookup (device_manager->id_table,
+- GINT_TO_POINTER (info->attachment));
+-
+- _gdk_device_set_associated_device (slave, master);
+- _gdk_device_add_slave (master, slave);
+-
+- g_signal_emit_by_name (device_manager, "device-changed", master);
++ gdk_x11_display_error_trap_pop_ignored (display);
++ if (info)
++ {
++ master = g_hash_table_lookup (device_manager->id_table,
++ GINT_TO_POINTER (info->attachment));
++ XIFreeDeviceInfo (info);
++
++ _gdk_device_set_associated_device (slave, master);
++ _gdk_device_add_slave (master, slave);
++
++ g_signal_emit_by_name (device_manager, "device-changed", master);
++ }
+ }
+
+ g_signal_emit_by_name (device_manager, "device-changed", slave);
+--
+1.7.7.3
+
diff --git a/gtk3.spec b/gtk3.spec
index a775307..e02119d 100644
--- a/gtk3.spec
+++ b/gtk3.spec
@@ -17,6 +17,8 @@ URL: http://www.gtk.org
Source: http://download.gnome.org/sources/gtk+/3.2/gtk+-%{version}.tar.xz
Source1: im-cedilla.conf
+Patch0: 0001-XI2-Push-error-traps-around-XIQueryDevice-calls.patch
+
BuildRequires: gnome-common autoconf automake intltool gettext
BuildRequires: atk-devel >= %{atk_version}
BuildRequires: glib2-devel >= %{glib2_version}
@@ -109,6 +111,7 @@ widget toolkit.
%prep
%setup -q -n gtk+-%{version}
+%patch0 -p1
%build
@@ -233,6 +236,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache
%{_datadir}/gtk-doc
%changelog
+* Wed Nov 30 2011 Matthias Clasen <mclasen at redhat.com> - 3.2.2-2
+- Try to fix XI2 related crashes
+
* Thu Nov 24 2011 Matthias Clasen <mclasen at redhat.com> - 3.2.2-1
- Update to 3.2.2
More information about the scm-commits
mailing list