Fix this to create a recursive mutex. Patch by Evan Jones!
authorChris Lattner <sabre@nondot.org>
Sun, 27 Feb 2005 19:07:36 +0000 (19:07 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 27 Feb 2005 19:07:36 +0000 (19:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20355 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/ThreadSupport-PThreads.h

index 1bd3f32a99e11eefab416d59089f6654e1346326..34b90909aa8edc5c5b6f8392207aae857edf2dd2 100644 (file)
@@ -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