| //===-- ProcessRunLock.cpp --------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #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 |