Udev monitor monitors the whole input subsystem, but not all devices
in the input subsystem have devnodes associated to them.
This MR makes the event processing ignore such devices.
All device handling assumes devices have devnodes, so here we just
simply ignore all devices which do not have one. They are irrelevant.
Previously, udev bus thread aborted when an event for a device without
a devnode was processed:
```
10111.330:0068:0084:trace:hid:process_monitor_event Received action "remove" for udev device (null)
10111.330:0068:0084:warn:hid:bus_main_thread L"UDEV" bus wait returned status 0xc0000005
```
Just plugging in and out a normal mouse was enough cause this.
This was because root input devices (which do not have devnodes) were
handled too and `find_device_from_devnode()` choked on NULL argument.
--
v3: winebus: change debugging class of an error case from WARN to ERR.
winebus: change debugging class of an error case from FIXME to ERR
winebus: group local variable declarations
winebus: ignore udev events of devices which do not have devnodes
winebus: log ERR if find_device_from_devnode() somehow gets called with NULL
https://gitlab.winehq.org/wine/wine/-/merge_requests/5385
Udev monitor monitors the whole input subsystem, but not all devices
in the input subsystem have devnodes associated to them.
This MR makes the event processing ignore such devices.
All device handling assumes devices have devnodes, so here we just
simply ignore all devices which do not have one. They are irrelevant.
Previously, udev bus thread aborted when an event for a device without
a devnode was processed:
```
10111.330:0068:0084:trace:hid:process_monitor_event Received action "remove" for udev device (null)
10111.330:0068:0084:warn:hid:bus_main_thread L"UDEV" bus wait returned status 0xc0000005
```
Just plugging in and out a normal mouse was enough cause this.
This was because root input devices (which do not have devnodes) were
handled too and `find_device_from_devnode()` choked on NULL argument.
--
v2: winebus: group local variable declarations
https://gitlab.winehq.org/wine/wine/-/merge_requests/5385
Udev monitor monitors the whole input subsystem, but not all devices
in the input subsystem have devnodes associated to them.
This MR makes the event processing ignore such devices.
All device handling assumes devices have devnodes, so here we just
simply ignore all devices which do not have one. They are irrelevant.
Previously, udev bus thread aborted when an event for a device without
a devnode was processed:
```
10111.330:0068:0084:trace:hid:process_monitor_event Received action "remove" for udev device (null)
10111.330:0068:0084:warn:hid:bus_main_thread L"UDEV" bus wait returned status 0xc0000005
```
Just plugging in and out a normal mouse was enough cause this.
This was because root input devices (which do not have devnodes) were
handled too and `find_device_from_devnode()` choked on NULL argument.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5385