From a97cf2138335150ce6484c3398c39cd4c3ac558c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 27 Feb 2005 19:07:36 +0000 Subject: [PATCH] Fix this to create a recursive mutex. Patch by Evan Jones! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20355 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/ThreadSupport-PThreads.h | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/include/llvm/Support/ThreadSupport-PThreads.h b/include/llvm/Support/ThreadSupport-PThreads.h index 1bd3f32a99e..34b90909aa8 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