Rémi Bernon (@rbernon) commented about dlls/xinput1_3/main.c:
+ { + controller_unlock(&controllers[index]); + return ERROR_DEVICE_NOT_CONNECTED; + } + + memcpy(&caps->Capabilities, &controllers[index].caps, sizeof(caps->Capabilities)); + + if (!HidD_GetAttributes(controllers[index].device, &attr)) + { + controller_unlock(&controllers[index]); + return ERROR_DEVICE_NOT_CONNECTED; + } + + caps->VendorId = attr.VendorID; + caps->ProductId = attr.ProductID; + caps->VersionNumber = attr.VersionNumber; You're missing unlock here, something like that would be better:
```suggestion:-16+0 DWORD ret = ERROR_SUCCESS; /* ... */ if (!controller_lock(&controllers[index])) return ERROR_DEVICE_NOT_CONNECTED; if (flags & XINPUT_FLAG_GAMEPAD && controllers[index].caps.SubType != XINPUT_DEVSUBTYPE_GAMEPAD) ret = ERROR_DEVICE_NOT_CONNECTED; if (!HidD_GetAttributes(controllers[index].device, &attr)) ret = ERROR_DEVICE_NOT_CONNECTED; else { caps->Capabilities = controllers[index].caps; caps->VendorId = attr.VendorID; caps->ProductId = attr.ProductID; caps->VersionNumber = attr.VersionNumber; } controller_unlock(&controllers[index]); ``` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4693#note_56890