Unlocking for multi-threaded access to the joystick API
void SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock);
If you are using the joystick API or handling events from multiple threads you should use these locking functions to protect access to the joysticks.
In particular, you are guaranteed that the joystick list won't change, so the API functions that take a joystick index will be valid, and joystick and game controller events will not be delivered.
This function is available since SDL 2.0.7.