From 613014373f4348cf2e6cd1255b9ea9a6987c0c75 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Oct 20 2008 03:33:05 +0000 Subject: - xserver-1.5.2-no-duplicate-devices.patch: don't re-add devices through HAL if they are already added (#467462). --- diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 347d98e..cce0f58 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -19,7 +19,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.5.2 -Release: 6%{?dist} +Release: 7%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -90,6 +90,7 @@ Patch6007: xserver-1.5.2-lies-damn-lies-and-aspect-ratios.patch # No evdev grab, disable kbd/mouse Patch6008: xserver-1.5.2-enable-RAW-console.patch Patch6009: xserver-1.5.2-disable-kbd-mouse.patch +Patch6010: xserver-1.5.2-no-duplicate-devices.patch %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri @@ -521,6 +522,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Oct 20 2008 Peter Hutterer 1.5.2-7 +- xserver-1.5.2-no-duplicate-devices.patch: don't re-add devices through HAL + if they are already added (#467462). + * Sun Oct 19 2008 Peter Hutterer 1.5.2-6 - Update xserver-1.5.2-disable-kbd-mouse.patch: if no config file is present, we need to force AllowEmptyInput on. diff --git a/xserver-1.5.2-no-duplicate-devices.patch b/xserver-1.5.2-no-duplicate-devices.patch new file mode 100644 index 0000000..92bd60c --- /dev/null +++ b/xserver-1.5.2-no-duplicate-devices.patch @@ -0,0 +1,63 @@ +From a4e9b92e2449b4c8f8654a0eaf0f1ca6627da1fc Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Mon, 20 Oct 2008 12:19:55 +1030 +Subject: [PATCH] config: don't add duplicate devices through HAL. + +If HAL is restarted, the device list is send to the server again, leading +first to duplicate devices (and thus duplicate events), and later to a +FatalError "Too many input devices." + +dev->config_info contains the UDI for the device. If the UDI of a new devices +is equal to one we already have in the device list, just ignore it. +--- + config/hal.c | 27 +++++++++++++++++++++++++++ + 1 files changed, 27 insertions(+), 0 deletions(-) + +diff --git a/config/hal.c b/config/hal.c +index 0e0505b..639e0ec 100644 +--- a/config/hal.c ++++ b/config/hal.c +@@ -166,6 +166,26 @@ get_prop_string_array(LibHalContext *hal_ctx, const char *udi, const char *prop) + return ret; + } + ++static BOOL ++device_is_duplicate(char *config_info) ++{ ++ DeviceIntPtr dev; ++ ++ for (dev = inputInfo.devices; dev; dev = dev->next) ++ { ++ if (dev->config_info && (strcmp(dev->config_info, config_info) == 0)) ++ return TRUE; ++ } ++ ++ for (dev = inputInfo.off_devices; dev; dev = dev->next) ++ { ++ if (dev->config_info && (strcmp(dev->config_info, config_info) == 0)) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ + static void + device_added(LibHalContext *hal_ctx, const char *udi) + { +@@ -227,6 +247,13 @@ device_added(LibHalContext *hal_ctx, const char *udi) + } + sprintf(config_info, "hal:%s", udi); + ++ /* Check for duplicate devices */ ++ if (device_is_duplicate(config_info)) ++ { ++ LogMessage(X_WARNING, "config/hal: device %s already added. Ignoring.\n", name); ++ goto unwind; ++ } ++ + /* ok, grab options from hal.. iterate through all properties + * and lets see if any of them are options that we can add */ + set = libhal_device_get_all_properties(hal_ctx, udi, &error); +-- +1.6.0.1 +