diff --git a/src/joystick/winrt/SDL_xinputjoystick.c b/src/joystick/winrt/SDL_xinputjoystick.c index 7c2853f29..1bb91b272 100644 --- a/src/joystick/winrt/SDL_xinputjoystick.c +++ b/src/joystick/winrt/SDL_xinputjoystick.c @@ -106,25 +106,27 @@ DeviceDetectionThreadMain(void * _data) */ /* See if any new devices are connected. */ + SDL_LockMutex(g_DeviceInfoLock); for (i = 0; i < XUSER_MAX_COUNT; ++i) { if (!g_XInputData[i].isDeviceConnected && !g_XInputData[i].isDeviceConnectionEventPending && !g_XInputData[i].isDeviceRemovalEventPending) { + SDL_UnlockMutex(g_DeviceInfoLock); result = XInputGetCapabilities(i, 0, &tempXInputCaps); + SDL_LockMutex(g_DeviceInfoLock); if (result == ERROR_SUCCESS) { /* Yes, a device is connected. Mark it as such. Others will be told about this (via an SDL_JOYDEVICEADDED event) in the next call to SDL_SYS_JoystickDetect. */ - SDL_LockMutex(g_DeviceInfoLock); g_XInputData[i].isDeviceConnected = SDL_TRUE; g_XInputData[i].isDeviceConnectionEventPending = SDL_TRUE; - SDL_UnlockMutex(g_DeviceInfoLock); } } } + SDL_UnlockMutex(g_DeviceInfoLock); } return 0;