Skip to content

Commit

Permalink
TryLockMutex: Fix error handling for TryLockMutex
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Apr 24, 2018
1 parent a9ae1b5 commit a1b8fa6
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/thread/pthread/SDL_sysmutex.c
Expand Up @@ -116,6 +116,7 @@ int
SDL_TryLockMutex(SDL_mutex * mutex)
{
int retval;
int result;
#if FAKE_RECURSIVE_MUTEX
pthread_t this_thread;
#endif
Expand All @@ -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");
Expand Down

0 comments on commit a1b8fa6

Please sign in to comment.