Some of them lock up or reset, and the vast majority of devices are not actually game controllers.
Fixes https://github.com/libsdl-org/SDL/issues/6733
(cherry picked from commit 83b29f9ce1fe6caa06769544c3b5f6c10ea97a0f)
```
./src/thread/pthread/SDL_syssem.c:140:12: warning: variable 'retval' is used uninitialized whenever 'while' loop exits because its condition is false [-Wsometimes-uninitialized]
while (sem_trywait(&sem->sem) != 0) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
./src/thread/pthread/SDL_syssem.c:149:12: note: uninitialized use occurs here
return retval;
^~~~~~
./src/thread/pthread/SDL_syssem.c:140:12: note: remove the condition if it is always true
while (sem_trywait(&sem->sem) != 0) {
```
This was a legitimate bug, thank you clang!
Fixes https://github.com/libsdl-org/SDL/issues/6830
(cherry picked from commit b678a9802435152324e0603055e4bb190d0ae526)
```
./src/joystick/SDL_joystick.c:105:12: warning: no previous extern declaration for non-static variable 'SDL_joystick_lock' [-Wmissing-variable-declarations]
SDL_mutex *SDL_joystick_lock = NULL; /* This needs to support recursive locks */
^
./src/joystick/SDL_joystick.c:105:1: note: declare 'static' if the variable is not intended to be used outside of this translation unit
SDL_mutex *SDL_joystick_lock = NULL; /* This needs to support recursive locks */
^
```
1 warning generated.
The annotations have been added to SDL_mutex.h and have been made public so applications can enable this for their own code.
Clang assumes that locking and unlocking can't fail, but SDL has the concept of a NULL mutex, so the mutex functions have been changed not to report errors if a mutex hasn't been initialized. We do have mutexes that might be accessed when they are NULL, notably in the event system, so this is an important change.
This commit cleans up a bunch of rare race conditions in the joystick and game controller code so now everything should be completely protected by the joystick lock.
To test this, change the compiler to "clang -Wthread-safety -Werror=thread-safety -DSDL_THREAD_SAFETY_ANALYSIS"
This happens when using Win+Alt+Left/Right on a resizable fullscreen desktop window on Windows
(cherry picked from commit 650e16a8245f3fb5056fc7f6b398fb88244b3477)
It was previously thought that these function calls were unnecessary as the initial bug and reproduction case that necessitated their addition seemed to be fixed, but apparently there are still cases where this needs to be set explicitly. Set the xdg surface geometry at creation time and when the window size changes.
Partially reverts #6361. This is not needed in the libdecor path, as libdecor calls this for the content surface internally.
(cherry picked from commit 90a964f132c63b07cf85e5687041d214fdea60f6)
Num Lock and Caps Lock always need to be explicitly handled by the modifier handler function, or they won't be correctly set if active at application startup, or if the lock state is changed while the application lacks focus since a key press for these keys will never be received. In these cases, the internal SDL modifier state can end up the inverse of the actual modifier state.
(cherry picked from commit 653e484da17d773f40bff94121a23a3b38f47a0a)