aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/lib/Support/Unix/RWMutex.inc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/lib/Support/Unix/RWMutex.inc')
-rw-r--r--contrib/llvm/lib/Support/Unix/RWMutex.inc20
1 files changed, 14 insertions, 6 deletions
diff --git a/contrib/llvm/lib/Support/Unix/RWMutex.inc b/contrib/llvm/lib/Support/Unix/RWMutex.inc
index 40e87ff13111..edcbd52f5f37 100644
--- a/contrib/llvm/lib/Support/Unix/RWMutex.inc
+++ b/contrib/llvm/lib/Support/Unix/RWMutex.inc
@@ -16,28 +16,36 @@
//=== is guaranteed to work on *all* UNIX variants.
//===----------------------------------------------------------------------===//
+#include "llvm/Support/Mutex.h"
+
namespace llvm {
using namespace sys;
-RWMutexImpl::RWMutexImpl() { }
+// This naive implementation treats readers the same as writers. This
+// will therefore deadlock if a thread tries to acquire a read lock
+// multiple times.
+
+RWMutexImpl::RWMutexImpl() : data_(new Mutex(false)) { }
-RWMutexImpl::~RWMutexImpl() { }
+RWMutexImpl::~RWMutexImpl() {
+ delete static_cast<Mutex *>(data_);
+}
bool RWMutexImpl::reader_acquire() {
- return true;
+ return static_cast<Mutex *>(data_)->acquire();
}
bool RWMutexImpl::reader_release() {
- return true;
+ return static_cast<Mutex *>(data_)->release();
}
bool RWMutexImpl::writer_acquire() {
- return true;
+ return static_cast<Mutex *>(data_)->acquire();
}
bool RWMutexImpl::writer_release() {
- return true;
+ return static_cast<Mutex *>(data_)->release();
}
}