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();
93 if (mutex->
owner == this_thread) {
100 if (pthread_mutex_lock(&mutex->
id) == 0) {
101 mutex->
owner = this_thread;
108 if (pthread_mutex_lock(&mutex->
id) != 0) {
119 #if FAKE_RECURSIVE_MUTEX 120 pthread_t this_thread;
128 #if FAKE_RECURSIVE_MUTEX 129 this_thread = pthread_self();
130 if (mutex->
owner == this_thread) {
137 if (pthread_mutex_trylock(&mutex->
id) == 0) {
138 mutex->
owner = this_thread;
140 }
else if (errno == EBUSY) {
143 retval =
SDL_SetError(
"pthread_mutex_trylock() failed");
147 if (pthread_mutex_trylock(&mutex->
id) != 0) {
148 if (errno == EBUSY) {
151 retval =
SDL_SetError(
"pthread_mutex_trylock() failed");
165 #if FAKE_RECURSIVE_MUTEX 167 if (pthread_self() == mutex->
owner) {
177 pthread_mutex_unlock(&mutex->
id);
184 if (pthread_mutex_unlock(&mutex->
id) != 0) {
int SDL_TryLockMutex(SDL_mutex *mutex)
int SDL_LockMutex(SDL_mutex *mutex)
#define SDL_MUTEX_TIMEDOUT
void SDL_DestroyMutex(SDL_mutex *mutex)
int SDL_UnlockMutex(SDL_mutex *mutex)
SDL_mutex * SDL_CreateMutex(void)
#define SDL_OutOfMemory()