Browse Source

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.
Sam Lantinga 8 years ago
parent
commit
7229397c0c
1 changed files with 1 additions and 1 deletions
  1. 1 1
      src/thread/pthread/SDL_sysmutex.c

+ 1 - 1
src/thread/pthread/SDL_sysmutex.c

@@ -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) {