mirror of https://github.com/encounter/SDL.git
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.
This commit is contained in:
parent
a9ae1b508d
commit
a1b8fa6071
|
@ -116,6 +116,7 @@ int
|
||||||
SDL_TryLockMutex(SDL_mutex * mutex)
|
SDL_TryLockMutex(SDL_mutex * mutex)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
int result;
|
||||||
#if FAKE_RECURSIVE_MUTEX
|
#if FAKE_RECURSIVE_MUTEX
|
||||||
pthread_t this_thread;
|
pthread_t this_thread;
|
||||||
#endif
|
#endif
|
||||||
|
@ -134,18 +135,20 @@ 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_trylock(&mutex->id) == 0) {
|
result = pthread_mutex_trylock(&mutex->id);
|
||||||
|
if (result == 0) {
|
||||||
mutex->owner = this_thread;
|
mutex->owner = this_thread;
|
||||||
mutex->recursive = 0;
|
mutex->recursive = 0;
|
||||||
} else if (errno == EBUSY) {
|
} else if (result == EBUSY) {
|
||||||
retval = SDL_MUTEX_TIMEDOUT;
|
retval = SDL_MUTEX_TIMEDOUT;
|
||||||
} else {
|
} else {
|
||||||
retval = SDL_SetError("pthread_mutex_trylock() failed");
|
retval = SDL_SetError("pthread_mutex_trylock() failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (pthread_mutex_trylock(&mutex->id) != 0) {
|
result = pthread_mutex_trylock(&mutex->id);
|
||||||
if (errno == EBUSY) {
|
if (result != 0) {
|
||||||
|
if (result == EBUSY) {
|
||||||
retval = SDL_MUTEX_TIMEDOUT;
|
retval = SDL_MUTEX_TIMEDOUT;
|
||||||
} else {
|
} else {
|
||||||
retval = SDL_SetError("pthread_mutex_trylock() failed");
|
retval = SDL_SetError("pthread_mutex_trylock() failed");
|
||||||
|
|
Loading…
Reference in New Issue