diff options
author | Benjamin Berg <bberg@redhat.com> | 2022-05-10 22:04:21 +0200 |
---|---|---|
committer | Benjamin Berg <bberg@redhat.com> | 2022-05-11 10:16:50 +0200 |
commit | dac0e3bc11f3440aeb3bed2e6fc681871930e13b (patch) | |
tree | e51de53c212125d1a9e43e5985f086ac8930a97e | |
parent | b78a2ab980ca8b84188ac161787bb5359a1c3f96 (diff) |
linux: Remove/add device if the sysfs path changed
-rw-r--r-- | src/linux/up-backend.c | 15 |
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 */ |