| #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 |