diff options
Diffstat (limited to 'include/llvm/Support/ThreadSupport-PThreads.h')
-rw-r--r-- | include/llvm/Support/ThreadSupport-PThreads.h | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/include/llvm/Support/ThreadSupport-PThreads.h b/include/llvm/Support/ThreadSupport-PThreads.h index 1bd3f32a99..34b90909aa 100644 --- a/include/llvm/Support/ThreadSupport-PThreads.h +++ b/include/llvm/Support/ThreadSupport-PThreads.h @@ -32,11 +32,34 @@ namespace llvm { void operator=(const Mutex &); // DO NOT IMPLEMENT public: Mutex() { + // Initialize the mutex as a recursive mutex pthread_mutexattr_t Attr; - pthread_mutex_init(&mutex, &Attr); + int errorcode = pthread_mutexattr_init(&Attr); + assert(errorcode == 0); + + errorcode = pthread_mutexattr_settype(&Attr, PTHREAD_MUTEX_RECURSIVE); + assert(errorcode == 0); + + errorcode = pthread_mutex_init(&mutex, &Attr); + assert(errorcode == 0); + + errorcode = pthread_mutexattr_destroy(&Attr); + assert(errorcode == 0); + } + + ~Mutex() { + int errorcode = pthread_mutex_destroy(&mutex); + assert(errorcode == 0); + } + + void acquire () { + int errorcode = pthread_mutex_lock(&mutex); + assert(errorcode == 0); + } + + void release () { + int errorcode = pthread_mutex_unlock(&mutex); + assert(errorcode == 0); } - ~Mutex() { pthread_mutex_destroy(&mutex); } - void acquire () { pthread_mutex_lock (&mutex); } - void release () { pthread_mutex_unlock (&mutex); } }; } // end namespace llvm |