diff options
author | emaste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 |
commit | c727fe695d28799acb499e9961f11ec07d4f9fe2 (patch) | |
tree | 56d79f94966870db1cecd65a7264510a25fd1cba /source/Host/common/ProcessRunLock.cpp | |
parent | 2e8c9206a971efee1b77ad2ae852265d6f4ecaa0 (diff) | |
download | FreeBSD-src-c727fe695d28799acb499e9961f11ec07d4f9fe2.zip FreeBSD-src-c727fe695d28799acb499e9961f11ec07d4f9fe2.tar.gz |
Import lldb as of SVN r194122
Sponsored by: DARPA, AFRL
Diffstat (limited to 'source/Host/common/ProcessRunLock.cpp')
-rw-r--r-- | source/Host/common/ProcessRunLock.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/source/Host/common/ProcessRunLock.cpp b/source/Host/common/ProcessRunLock.cpp new file mode 100644 index 0000000..669a96d --- /dev/null +++ b/source/Host/common/ProcessRunLock.cpp @@ -0,0 +1,71 @@ +#ifndef _WIN32 + +#include "lldb/Host/ProcessRunLock.h" + +namespace lldb_private { + + ProcessRunLock::ProcessRunLock() + : m_running(false) + { + int err = ::pthread_rwlock_init(&m_rwlock, NULL); (void) err; + //#if LLDB_CONFIGURATION_DEBUG + // assert(err == 0); + //#endif + } + + ProcessRunLock::~ProcessRunLock() + { + int err = ::pthread_rwlock_destroy(&m_rwlock); (void) err; + //#if LLDB_CONFIGURATION_DEBUG + // assert(err == 0); + //#endif + } + + bool ProcessRunLock::ReadTryLock() + { + ::pthread_rwlock_rdlock(&m_rwlock); + if (m_running == false) + { + return true; + } + ::pthread_rwlock_unlock(&m_rwlock); + return false; + } + + bool ProcessRunLock::ReadUnlock() + { + return ::pthread_rwlock_unlock(&m_rwlock) == 0; + } + + bool ProcessRunLock::SetRunning() + { + ::pthread_rwlock_wrlock(&m_rwlock); + m_running = true; + ::pthread_rwlock_unlock(&m_rwlock); + return true; + } + + bool ProcessRunLock::TrySetRunning() + { + bool r; + + if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) + { + r = !m_running; + m_running = true; + ::pthread_rwlock_unlock(&m_rwlock); + return r; + } + return false; + } + + bool ProcessRunLock::SetStopped() + { + ::pthread_rwlock_wrlock(&m_rwlock); + m_running = false; + ::pthread_rwlock_unlock(&m_rwlock); + return true; + } +} + +#endif |