static int manager_dispatch_seat_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
Manager *m = ASSERT_PTR(userdata);
+ int r;
assert(device);
- manager_process_seat_device(m, device);
+ r = manager_process_seat_device(m, device);
+ if (r < 0)
+ log_device_warning_errno(device, r, "Failed to process seat device, ignoring: %m");
+
return 0;
}
static int manager_dispatch_device_udev(sd_device_monitor *monitor, sd_device *device, void *userdata) {
Manager *m = ASSERT_PTR(userdata);
+ int r;
assert(device);
- manager_process_seat_device(m, device);
+ /* If the device currently has "master-of-seat" tag, then it has been or will be processed by
+ * manager_dispatch_seat_udev(). */
+ r = sd_device_has_current_tag(device, "master-of-seat");
+ if (r < 0)
+ log_device_warning_errno(device, r, "Failed to check if the device currently has master-of-seat tag, ignoring: %m");
+ if (r != 0)
+ return 0;
+
+ r = manager_process_seat_device(m, device);
+ if (r < 0)
+ log_device_warning_errno(device, r, "Failed to process seat device, ignoring: %m");
+
return 0;
}