@@ -24,48 +24,26 @@ # include "threading_winapi.m" #else # error No threads available! #endif +#if !defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) && !defined(OF_WINDOWS) bool of_rmutex_new(of_rmutex_t *rmutex) { -#if defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) - pthread_mutexattr_t attr; - - if (pthread_mutexattr_init(&attr) != 0) - return false; - - if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0) - return false; - - if (pthread_mutex_init(rmutex, &attr) != 0) - return false; - - if (pthread_mutexattr_destroy(&attr) != 0) - return false; - - return true; -#elif defined(OF_WINDOWS) - return of_mutex_new(rmutex); -#else if (!of_mutex_new(&rmutex->mutex)) return false; if (!of_tlskey_new(&rmutex->count)) return false; return true; -#endif } bool of_rmutex_lock(of_rmutex_t *rmutex) { -#if defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) || defined(OF_WINDOWS) - return of_mutex_lock(rmutex); -#else uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); if (count > 0) { if (!of_tlskey_set(rmutex->count, (void*)(count + 1))) return false; @@ -80,19 +58,15 @@ of_mutex_unlock(&rmutex->mutex); return false; } return true; -#endif } bool of_rmutex_trylock(of_rmutex_t *rmutex) { -#if defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) || defined(OF_WINDOWS) - return of_mutex_trylock(rmutex); -#else uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); if (count > 0) { if (!of_tlskey_set(rmutex->count, (void*)(count + 1))) return false; @@ -107,19 +81,15 @@ of_mutex_unlock(&rmutex->mutex); return false; } return true; -#endif } bool of_rmutex_unlock(of_rmutex_t *rmutex) { -#if defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) || defined(OF_WINDOWS) - return of_mutex_unlock(rmutex); -#else uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); if (count > 1) { if (!of_tlskey_set(rmutex->count, (void*)(count - 1))) return false; @@ -132,23 +102,19 @@ if (!of_mutex_unlock(&rmutex->mutex)) return false; return true; -#endif } bool of_rmutex_free(of_rmutex_t *rmutex) { -#if defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) || defined(OF_WINDOWS) - return of_mutex_free(rmutex); -#else if (!of_mutex_free(&rmutex->mutex)) return false; if (!of_tlskey_free(rmutex->count)) return false; return true; -#endif } +#endif