Procházet zdrojové kódy

TryLockMutex: Fix error handling for TryLockMutex

Christian Herzig

pthread_mutex_trylock() and by the way, pthread_mutex_lock() do not set errno.
Pthread-methods directly return error code as int. See related man-pages for
details.
Sam Lantinga před 7 roky
rodič
revize
a1b8fa6071
1 změnil soubory, kde provedl 7 přidání a 4 odebrání
  1. 7 4
      src/thread/pthread/SDL_sysmutex.c

+ 7 - 4
src/thread/pthread/SDL_sysmutex.c

@@ -116,6 +116,7 @@ int
 SDL_TryLockMutex(SDL_mutex * mutex)
 {
     int retval;
+    int result;
 #if FAKE_RECURSIVE_MUTEX
     pthread_t this_thread;
 #endif
@@ -134,18 +135,20 @@ SDL_TryLockMutex(SDL_mutex * mutex)
          We set the locking thread id after we obtain the lock
          so unlocks from other threads will fail.
          */
-        if (pthread_mutex_trylock(&mutex->id) == 0) {
+        result = pthread_mutex_trylock(&mutex->id);
+        if (result == 0) {
             mutex->owner = this_thread;
             mutex->recursive = 0;
-        } else if (errno == EBUSY) {
+        } else if (result == EBUSY) {
             retval = SDL_MUTEX_TIMEDOUT;
         } else {
             retval = SDL_SetError("pthread_mutex_trylock() failed");
         }
     }
 #else
-    if (pthread_mutex_trylock(&mutex->id) != 0) {
-        if (errno == EBUSY) {
+    result = pthread_mutex_trylock(&mutex->id);
+    if (result != 0) {
+        if (result == EBUSY) {
             retval = SDL_MUTEX_TIMEDOUT;
         } else {
             retval = SDL_SetError("pthread_mutex_trylock() failed");