diff options
| author | Ha Thach <[email protected]> | 2026-08-27 08:43:02 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-08-27 08:43:02 +0700 |
| commit | d799b6f572e4b39ebebcf72126d3120f7829c034 (patch) | |
| tree | 788472b0bb45dc9fca9881e44dce36cc3fdf132e /hw/bsp/samd11/boards/samd11_xplained | |
| parent | b15c720ab0a36ee16c1cf7984c7c0f4ccf3a7015 (diff) | |
hid_generic_inout was the last unbounded blocking IO in the file. hidapi's
hidraw backend reads manufacturer/product via udev for each device reaching
create_device_info_for_device, both usb_string_attr served under the device
lock a wedged usbfs ioctl holds — and every DUT here is VID cafe, so a wedged
sibling stalls the walk.
A thread cannot bound it: cython-hidapi calls hid_open and hid_close bare
(0.15.0 hid.pyx), so they hold the GIL and the waiter can never resume.
Measured — a 1.0s bound never returned. run_cmd's killpg reaches a child
regardless; it gains an argv form for the -c body.
Filters on both ids: hidapi only runs the free uevent pre-check when ids are
passed (linux/hid.c:962), so an unfiltered walk sends every device straight to
the locked reads. Tests stall via ctypes.PyDLL, which unlike CDLL holds the
GIL — the shape a thread bound cannot cover.
Diffstat (limited to 'hw/bsp/samd11/boards/samd11_xplained')
0 files changed, 0 insertions, 0 deletions
