From b2188b325db42494c04a1b1ba144850d98eb570f Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 25 Sep 2025 10:36:14 -0700 Subject: [PATCH] Fixed HIDAPI controller disconnect reading on multiple threads If multiple threads are calling SDL_UpdateJoysticks(), then an overlapped read can be initiated on one thread (read_pending set to true) and GetOverlappedResult() called on another thread. This results in ERROR_OPERATION_ABORTED. This is harmless so we shouldn't return an error in this case, we'll just retry the read on the next call. Fixes https://github.com/libsdl-org/SDL/issues/14033 --- src/hidapi/windows/hid.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hidapi/windows/hid.c b/src/hidapi/windows/hid.c index 87aa639e24..8a8224302e 100644 --- a/src/hidapi/windows/hid.c +++ b/src/hidapi/windows/hid.c @@ -1399,6 +1399,11 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char } } if (!res) { + if (GetLastError() == ERROR_OPERATION_ABORTED) { + /* The read request was issued on another thread. + This is harmless, so just ignore it. */ + return 0; + } register_winapi_error(dev, L"hid_read_timeout/GetOverlappedResult"); }