Receiver.close() nulled its own handle first and only then closed its paired devices. A paired device's feature_request() sends over the receiver's handle, so the device.cleanups callbacks that run inside Device.close() - release RGB SW control, restore onboard-profile mode - were issued with handle=None, failed, and were silently swallowed. On every clean Solaar quit a receiver-paired keyboard was left in host mode; on the G915 TKL that means dead F-keys until a power cycle (#3266). Wired devices were unaffected: Device.close() already runs cleanups before clearing its handle, per its own comment. Close the devices first, then drop the handle, mirroring Device.close(). Also log cleanup write failures in rgb_power.cleanup at debug level instead of swallowing them silently, so a torn-down transport can't hide; debug because failures are routine when the device is unplugged. The regression test fails against the previous ordering. |
||
|---|---|---|
| .. | ||
| hid_parser | ||
| hidapi | ||
| keysyms | ||
| logitech_receiver | ||
| solaar | ||