21#include "../../SDL_internal.h"
28#if !SDL_THREAD_PTHREAD_RECURSIVE_MUTEX && \
29 !SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP
30#define FAKE_RECURSIVE_MUTEX 1
36#if FAKE_RECURSIVE_MUTEX
46 pthread_mutexattr_t attr;
51 pthread_mutexattr_init(&attr);
52#if SDL_THREAD_PTHREAD_RECURSIVE_MUTEX
53 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
54#elif SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP
55 pthread_mutexattr_setkind_np(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
59 if (pthread_mutex_init(&
mutex->
id, &attr) != 0) {
74 pthread_mutex_destroy(&
mutex->
id);
83#if FAKE_RECURSIVE_MUTEX
84 pthread_t this_thread;
91#if FAKE_RECURSIVE_MUTEX
92 this_thread = pthread_self();
100 if (pthread_mutex_lock(&
mutex->
id) == 0) {
108 if (pthread_mutex_lock(&
mutex->
id) != 0) {
120#if FAKE_RECURSIVE_MUTEX
121 pthread_t this_thread;
129#if FAKE_RECURSIVE_MUTEX
130 this_thread = pthread_self();
142 }
else if (
result == EBUSY) {
168#if FAKE_RECURSIVE_MUTEX
180 pthread_mutex_unlock(&
mutex->
id);
187 if (pthread_mutex_unlock(&
mutex->
id) != 0) {
#define SDL_OutOfMemory()
#define SDL_MUTEX_TIMEDOUT
void SDL_DestroyMutex(SDL_mutex *mutex)
int SDL_LockMutex(SDL_mutex *mutex)
int SDL_TryLockMutex(SDL_mutex *mutex)
SDL_mutex * SDL_CreateMutex(void)
int SDL_UnlockMutex(SDL_mutex *mutex)