Skip to content

Commit

Permalink
WinRT: prevented a potential race condition in the XInput backend
Browse files Browse the repository at this point in the history
The race condition could've been triggered on device removal.
  • Loading branch information
DavidLudwig committed Dec 25, 2013
1 parent 8db3341 commit ca867fc
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/joystick/winrt/SDL_xinputjoystick.c
Expand Up @@ -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;
Expand Down

0 comments on commit ca867fc

Please sign in to comment.