diff --git a/src/login/logind.c b/src/login/logind.c index 31565f1fce3..0a8663412dd 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -610,19 +610,35 @@ static int manager_enumerate_inhibitors(Manager *m) { 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; }