diff options
Diffstat (limited to 'contrib/llvm/lib/Support/Unix/RWMutex.inc')
-rw-r--r-- | contrib/llvm/lib/Support/Unix/RWMutex.inc | 20 |
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(); } } |