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
This commit is contained in:
Sam Lantinga
2025-09-25 10:36:14 -07:00
parent 33a74c7548
commit b2188b325d

View File

@@ -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");
}