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) {