22 #include "JackPosixMutex.h"    23 #include "JackError.h"    28     JackBasePosixMutex::JackBasePosixMutex(
const char* name)
    31         int res = pthread_mutex_init(&fMutex, NULL);
    32         ThrowIf(res != 0, JackException(
"JackBasePosixMutex: could not init the mutex"));
    35     JackBasePosixMutex::~JackBasePosixMutex()
    37         pthread_mutex_destroy(&fMutex);
    40     bool JackBasePosixMutex::Lock()
    42         pthread_t current_thread = pthread_self();
    44         if (!pthread_equal(current_thread, fOwner)) {
    45             int res = pthread_mutex_lock(&fMutex);
    47                 fOwner = current_thread;
    50                 jack_error(
"JackBasePosixMutex::Lock res = %d", res);
    58     bool JackBasePosixMutex::Trylock()
    60         pthread_t current_thread = pthread_self();
    62         if (!pthread_equal(current_thread, fOwner)) {
    63             int res = pthread_mutex_trylock(&fMutex);
    65                 fOwner = current_thread;
    75     bool JackBasePosixMutex::Unlock()
    77         if (pthread_equal(pthread_self(), fOwner)) {
    79             int res = pthread_mutex_unlock(&fMutex);
    83                 jack_error(
"JackBasePosixMutex::Unlock res = %d", res);
    91     JackPosixMutex::JackPosixMutex(
const char* name)
    94         pthread_mutexattr_t mutex_attr;
    96         res = pthread_mutexattr_init(&mutex_attr);
    97         ThrowIf(res != 0, JackException(
"JackBasePosixMutex: could not init the mutex attribute"));
    98         res = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
    99         ThrowIf(res != 0, JackException(
"JackBasePosixMutex: could not settype the mutex"));
   100         res = pthread_mutex_init(&fMutex, &mutex_attr);
   101         ThrowIf(res != 0, JackException(
"JackBasePosixMutex: could not init the mutex"));
   102         pthread_mutexattr_destroy(&mutex_attr);
   105     JackPosixMutex::~JackPosixMutex()
   107         pthread_mutex_destroy(&fMutex);
   110     bool JackPosixMutex::Lock()
   112         int res = pthread_mutex_lock(&fMutex);
   114             jack_log(
"JackPosixMutex::Lock res = %d", res);
   119     bool JackPosixMutex::Trylock()
   121         return (pthread_mutex_trylock(&fMutex) == 0);
   124     bool JackPosixMutex::Unlock()
   126         int res = pthread_mutex_unlock(&fMutex);
   128             jack_log(
"JackPosixMutex::Unlock res = %d", res);
 SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)