summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2022-05-10 22:04:21 +0200
committerBenjamin Berg <bberg@redhat.com>2022-05-11 10:16:50 +0200
commitdac0e3bc11f3440aeb3bed2e6fc681871930e13b (patch)
treee51de53c212125d1a9e43e5985f086ac8930a97e
parentb78a2ab980ca8b84188ac161787bb5359a1c3f96 (diff)
linux: Remove/add device if the sysfs path changed
-rw-r--r--src/linux/up-backend.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/linux/up-backend.c b/src/linux/up-backend.c
index 38be8a3..613e912 100644
--- a/src/linux/up-backend.c
+++ b/src/linux/up-backend.c
@@ -216,9 +216,18 @@ up_backend_device_add (UpBackend *backend, GUdevDevice *native, const char *was_
object = up_device_list_lookup (backend->priv->device_list, G_OBJECT (native));
if (object != NULL) {
device = UP_DEVICE (object);
- /* we already have the device; treat as change event */
- up_backend_device_changed (backend, native, "add");
- return;
+
+ /* If the known device is different, then remove it. If it is
+ * the same, then simply treat it as a "changed" event.
+ */
+ if (g_strcmp0 (g_udev_device_get_sysfs_path (native),
+ g_udev_device_get_sysfs_path (G_UDEV_DEVICE (up_device_get_native (device)))) != 0) {
+ up_backend_device_remove (backend, G_UDEV_DEVICE (up_device_get_native (device)));
+ g_clear_object (&device);
+ } else {
+ up_backend_device_changed (backend, native, "add");
+ return;
+ }
}
/* get the right sort of device */