Fixed bug 3258 - SDL_TryLockMutex blocks for pthreads with FAKE_RECURSIVE_MUTEX

Ian Abbott

I just spotted what I think is a bug in "src/thread/pthread/SDL_sysmutex.c" in the SDL_TryLockMutex function when FAKE_RECURSIVE_MUTEX is defined (for an implementation of Pthreads with no recursive mutex support).  It calls pthread_mutex_lock instead of pthread_mutex_trylock, so it will block until the mutex is available instead of returning SDL_MUTEX_TIMEDOUT if it cannot lock the mutex immediately.
This commit is contained in:
Sam Lantinga 2017-08-11 21:47:31 -07:00
parent b5ea3c6d07
commit 7229397c0c
1 changed files with 1 additions and 1 deletions

View File

@ -134,7 +134,7 @@ SDL_TryLockMutex(SDL_mutex * mutex)
We set the locking thread id after we obtain the lock We set the locking thread id after we obtain the lock
so unlocks from other threads will fail. so unlocks from other threads will fail.
*/ */
if (pthread_mutex_lock(&mutex->id) == 0) { if (pthread_mutex_trylock(&mutex->id) == 0) {
mutex->owner = this_thread; mutex->owner = this_thread;
mutex->recursive = 0; mutex->recursive = 0;
} else if (errno == EBUSY) { } else if (errno == EBUSY) {