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]); ```