@@ -17,171 +17,183 @@ #include "config.h" #import "mutex.h" -bool +int of_mutex_new(of_mutex_t *mutex) { - return (pthread_mutex_init(mutex, NULL) == 0); + return pthread_mutex_init(mutex, NULL); } -bool +int of_mutex_lock(of_mutex_t *mutex) { - return (pthread_mutex_lock(mutex) == 0); + return pthread_mutex_lock(mutex); } -bool +int of_mutex_trylock(of_mutex_t *mutex) { - return (pthread_mutex_trylock(mutex) == 0); + return pthread_mutex_trylock(mutex); } -bool +int of_mutex_unlock(of_mutex_t *mutex) { - return (pthread_mutex_unlock(mutex) == 0); + return pthread_mutex_unlock(mutex); } -bool +int of_mutex_free(of_mutex_t *mutex) { - return (pthread_mutex_destroy(mutex) == 0); + return pthread_mutex_destroy(mutex); } #ifdef OF_HAVE_RECURSIVE_PTHREAD_MUTEXES -bool +int of_rmutex_new(of_rmutex_t *rmutex) { + int error; 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; -} - -bool + if ((error = pthread_mutexattr_init(&attr)) != 0) + return error; + + if ((error = pthread_mutexattr_settype(&attr, + PTHREAD_MUTEX_RECURSIVE)) != 0) + return error; + + if ((error = pthread_mutex_init(rmutex, &attr)) != 0) + return error; + + if ((error = pthread_mutexattr_destroy(&attr)) != 0) + return error; + + return 0; +} + +int of_rmutex_lock(of_rmutex_t *rmutex) { return of_mutex_lock(rmutex); } -bool +int of_rmutex_trylock(of_rmutex_t *rmutex) { return of_mutex_trylock(rmutex); } -bool +int of_rmutex_unlock(of_rmutex_t *rmutex) { return of_mutex_unlock(rmutex); } -bool +int of_rmutex_free(of_rmutex_t *rmutex) { return of_mutex_free(rmutex); } #else -bool +int of_rmutex_new(of_rmutex_t *rmutex) { - if (!of_mutex_new(&rmutex->mutex)) - return false; + int error; + + if ((error = of_mutex_new(&rmutex->mutex)) != 0) + return error; - if (!of_tlskey_new(&rmutex->count)) - return false; + if ((error = of_tlskey_new(&rmutex->count)) != 0) + return error; - return true; + return 0; } -bool +int of_rmutex_lock(of_rmutex_t *rmutex) { uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); - - if (count > 0) { - if (!of_tlskey_set(rmutex->count, (void *)(count + 1))) - return false; - - return true; - } - - if (!of_mutex_lock(&rmutex->mutex)) - return false; - - if (!of_tlskey_set(rmutex->count, (void *)1)) { - of_mutex_unlock(&rmutex->mutex); - return false; - } - - return true; -} - -bool + int error; + + if (count > 0) { + if ((error = of_tlskey_set(rmutex->count, + (void *)(count + 1))) != 0) + return error; + + return 0; + } + + if ((error = of_mutex_lock(&rmutex->mutex)) != 0) + return error; + + if ((error = of_tlskey_set(rmutex->count, (void *)1)) != 0) { + of_mutex_unlock(&rmutex->mutex); + return error; + } + + return 0; +} + +int of_rmutex_trylock(of_rmutex_t *rmutex) { uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); - - if (count > 0) { - if (!of_tlskey_set(rmutex->count, (void *)(count + 1))) - return false; - - return true; - } - - if (!of_mutex_trylock(&rmutex->mutex)) - return false; - - if (!of_tlskey_set(rmutex->count, (void *)1)) { - of_mutex_unlock(&rmutex->mutex); - return false; - } - - return true; -} - -bool + int error; + + if (count > 0) { + if ((error = of_tlskey_set(rmutex->count, + (void *)(count + 1))) != 0) + return error; + + return 0; + } + + if ((error = of_mutex_trylock(&rmutex->mutex)) != 0) + return error; + + if ((error = of_tlskey_set(rmutex->count, (void *)1)) != 0) { + of_mutex_unlock(&rmutex->mutex); + return error; + } + + return 0; +} + +int of_rmutex_unlock(of_rmutex_t *rmutex) { uintptr_t count = (uintptr_t)of_tlskey_get(rmutex->count); - - if (count > 1) { - if (!of_tlskey_set(rmutex->count, (void *)(count - 1))) - return false; - - return true; - } - - if (!of_tlskey_set(rmutex->count, (void *)0)) - return false; - - if (!of_mutex_unlock(&rmutex->mutex)) - return false; - - return true; -} - -bool -of_rmutex_free(of_rmutex_t *rmutex) -{ - if (!of_mutex_free(&rmutex->mutex)) - return false; - - if (!of_tlskey_free(rmutex->count)) - return false; - - return true; + int error; + + if (count > 1) { + if ((error = of_tlskey_set(rmutex->count, + (void *)(count - 1))) != 0) + return error; + + return 0; + } + + if ((error = of_tlskey_set(rmutex->count, (void *)0)) != 0) + return error; + + if ((error = of_mutex_unlock(&rmutex->mutex)) != 0) + return error; + + return 0; +} + +int +of_rmutex_free(of_rmutex_t *rmutex) +{ + int error; + + if ((error = of_mutex_free(&rmutex->mutex)) != 0) + return error; + + if ((error = of_tlskey_free(rmutex->count)) != 0) + return error; + + return 0; } #endif