Fixed deadlock in new raw input joystick code

The appropriate locking is done elsewhere, this prevents inverted lock acquisition
This commit is contained in:
Sam Lantinga 2020-04-07 10:13:08 -07:00
parent b6afbe6317
commit 50cb8e0f04
1 changed files with 1 additions and 10 deletions

View File

@ -36,7 +36,6 @@
#include "SDL_assert.h" #include "SDL_assert.h"
#include "SDL_endian.h" #include "SDL_endian.h"
#include "SDL_hints.h" #include "SDL_hints.h"
#include "SDL_mutex.h"
#include "../SDL_sysjoystick.h" #include "../SDL_sysjoystick.h"
#include "../../core/windows/SDL_windows.h" #include "../../core/windows/SDL_windows.h"
#include "../hidapi/SDL_hidapijoystick_c.h" #include "../hidapi/SDL_hidapijoystick_c.h"
@ -117,7 +116,6 @@ struct joystick_hwdata
{ {
void *reserved; /* reserving a value here to ensure the new SDL_hidapijoystick.c code never dereferences this */ void *reserved; /* reserving a value here to ensure the new SDL_hidapijoystick.c code never dereferences this */
SDL_RAWINPUT_Device *device; SDL_RAWINPUT_Device *device;
SDL_mutex *mutex;
}; };
SDL_RAWINPUT_Device *SDL_RAWINPUT_devices; SDL_RAWINPUT_Device *SDL_RAWINPUT_devices;
@ -564,7 +562,6 @@ RAWINPUT_JoystickOpen(SDL_Joystick * joystick, int device_index)
hwdata->device = device; hwdata->device = device;
device->joystick = joystick; device->joystick = joystick;
hwdata->mutex = SDL_CreateMutex();
joystick->hwdata = hwdata; joystick->hwdata = hwdata;
return 0; return 0;
@ -577,10 +574,7 @@ RAWINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Ui
SDL_RAWINPUT_Device *device = hwdata->device; SDL_RAWINPUT_Device *device = hwdata->device;
int result; int result;
SDL_LockMutex(hwdata->mutex); return device->driver->RumbleJoystick(&device->hiddevice, joystick, low_frequency_rumble, high_frequency_rumble);
result = device->driver->RumbleJoystick(&device->hiddevice, joystick, low_frequency_rumble, high_frequency_rumble);
SDL_UnlockMutex(hwdata->mutex);
return result;
} }
static void static void
@ -593,9 +587,7 @@ RAWINPUT_JoystickUpdate(SDL_Joystick * joystick)
hwdata = joystick->hwdata; hwdata = joystick->hwdata;
device = hwdata->device; device = hwdata->device;
SDL_LockMutex(hwdata->mutex);
device->driver->UpdateDevice(&device->hiddevice); device->driver->UpdateDevice(&device->hiddevice);
SDL_UnlockMutex(hwdata->mutex);
} }
static void static void
@ -613,7 +605,6 @@ RAWINPUT_JoystickClose(SDL_Joystick * joystick)
device->joystick = NULL; device->joystick = NULL;
} }
SDL_DestroyMutex(hwdata->mutex);
SDL_free(hwdata); SDL_free(hwdata);
joystick->hwdata = NULL; joystick->hwdata = NULL;
} }