1435933ddSDimitry Andric //===-- ProcessRunLock.cpp --------------------------------------*- C++ -*-===// 2435933ddSDimitry Andric // 3435933ddSDimitry Andric // The LLVM Compiler Infrastructure 4435933ddSDimitry Andric // 5435933ddSDimitry Andric // This file is distributed under the University of Illinois Open Source 6435933ddSDimitry Andric // License. See LICENSE.TXT for details. 7435933ddSDimitry Andric // 8435933ddSDimitry Andric //===----------------------------------------------------------------------===// 935617911SEd Maste 10435933ddSDimitry Andric #ifndef _WIN32 1135617911SEd Maste #include "lldb/Host/ProcessRunLock.h" 1235617911SEd Maste 1335617911SEd Maste namespace lldb_private { 1435617911SEd Maste ProcessRunLock()15435933ddSDimitry AndricProcessRunLock::ProcessRunLock() : m_running(false) { 16435933ddSDimitry Andric int err = ::pthread_rwlock_init(&m_rwlock, NULL); 17435933ddSDimitry Andric (void)err; 1835617911SEd Maste //#if LLDB_CONFIGURATION_DEBUG 1935617911SEd Maste // assert(err == 0); 2035617911SEd Maste //#endif 2135617911SEd Maste } 2235617911SEd Maste ~ProcessRunLock()23435933ddSDimitry AndricProcessRunLock::~ProcessRunLock() { 24435933ddSDimitry Andric int err = ::pthread_rwlock_destroy(&m_rwlock); 25435933ddSDimitry Andric (void)err; 2635617911SEd Maste //#if LLDB_CONFIGURATION_DEBUG 2735617911SEd Maste // assert(err == 0); 2835617911SEd Maste //#endif 2935617911SEd Maste } 3035617911SEd Maste ReadTryLock()31435933ddSDimitry Andricbool ProcessRunLock::ReadTryLock() { 3235617911SEd Maste ::pthread_rwlock_rdlock(&m_rwlock); 33*b5893f02SDimitry Andric if (!m_running) { 3435617911SEd Maste return true; 3535617911SEd Maste } 3635617911SEd Maste ::pthread_rwlock_unlock(&m_rwlock); 3735617911SEd Maste return false; 3835617911SEd Maste } 3935617911SEd Maste ReadUnlock()40435933ddSDimitry Andricbool ProcessRunLock::ReadUnlock() { 4135617911SEd Maste return ::pthread_rwlock_unlock(&m_rwlock) == 0; 4235617911SEd Maste } 4335617911SEd Maste SetRunning()44435933ddSDimitry Andricbool ProcessRunLock::SetRunning() { 4535617911SEd Maste ::pthread_rwlock_wrlock(&m_rwlock); 4635617911SEd Maste m_running = true; 4735617911SEd Maste ::pthread_rwlock_unlock(&m_rwlock); 4835617911SEd Maste return true; 4935617911SEd Maste } 5035617911SEd Maste TrySetRunning()51435933ddSDimitry Andricbool ProcessRunLock::TrySetRunning() { 5235617911SEd Maste bool r; 5335617911SEd Maste 54435933ddSDimitry Andric if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) { 5535617911SEd Maste r = !m_running; 5635617911SEd Maste m_running = true; 5735617911SEd Maste ::pthread_rwlock_unlock(&m_rwlock); 5835617911SEd Maste return r; 5935617911SEd Maste } 6035617911SEd Maste return false; 6135617911SEd Maste } 6235617911SEd Maste SetStopped()63435933ddSDimitry Andricbool ProcessRunLock::SetStopped() { 6435617911SEd Maste ::pthread_rwlock_wrlock(&m_rwlock); 6535617911SEd Maste m_running = false; 6635617911SEd Maste ::pthread_rwlock_unlock(&m_rwlock); 6735617911SEd Maste return true; 6835617911SEd Maste } 6935617911SEd Maste } 7035617911SEd Maste 7135617911SEd Maste #endif 72