summaryrefslogtreecommitdiffstats
path: root/source/l/hal/patches/ignore_dupe_add_events.diff
diff options
context:
space:
mode:
Diffstat (limited to 'source/l/hal/patches/ignore_dupe_add_events.diff')
-rw-r--r--source/l/hal/patches/ignore_dupe_add_events.diff40
1 files changed, 40 insertions, 0 deletions
diff --git a/source/l/hal/patches/ignore_dupe_add_events.diff b/source/l/hal/patches/ignore_dupe_add_events.diff
new file mode 100644
index 000000000..0056d8f96
--- /dev/null
+++ b/source/l/hal/patches/ignore_dupe_add_events.diff
@@ -0,0 +1,40 @@
+Author: Danny Kukawka <danny.kukawka@web.de>
+Date: Wed Mar 18 17:30:53 2009 +0100
+
+ ignore ADD events if there is already a device with same sysfs_path
+
+ Ignore ADD events if there is already a device with the same
+ syfs_path available in the GDL or TDL. This should prevent
+ problems getting duplicated devices from calling 'udevadm trigger'
+ (fd.o#18861) or from some other rare cases (see:
+ http://lists.freedesktop.org/archives/hal/2009-February/012954.html).
+
+ TODO: Check if it make sense to call a refresh for the already
+ existing device instead of ignoring the event completely.
+
+diff -Nur hal-0.5.11.orig/hald/linux/device.c hal-0.5.11/hald/linux/device.c
+--- hal-0.5.11.orig/hald/linux/device.c 2008-05-07 18:23:42.000000000 -0500
++++ hal-0.5.11/hald/linux/device.c 2009-07-16 16:21:36.619979288 -0500
+@@ -4423,11 +4423,22 @@
+ handler = dev_handlers[i];
+ if (strcmp (handler->subsystem, subsystem) == 0) {
+ HalDevice *d;
++ HalDevice *check;
+
+ if (strcmp (subsystem, "scsi") == 0)
+ if (missing_scsi_host (sysfs_path, (HotplugEvent *)end_token, HOTPLUG_ACTION_ADD))
+ goto out;
+
++ /* check if there is already a device with this sysfs_path in the system */
++ if ((check = hal_device_store_match_key_value_string (hald_get_gdl (), "linux.sysfs_path", sysfs_path)) != NULL ||
++ (check = hal_device_store_match_key_value_string (hald_get_tdl (), "linux.sysfs_path", sysfs_path)) != NULL) {
++ HAL_WARNING(("Have already a device with sysfs_path='%s' and udi='%s'. Ignore new add event for now.",
++ sysfs_path, hal_device_get_udi(check)));
++ /* maybe we should do a refresh on the found device ??? */
++ hotplug_event_end (end_token);
++ goto out;
++ }
++
+ /* attempt to add the device */
+ d = handler->add (sysfs_path, device_file, parent_dev, parent_path);
+ if (d == NULL) {