ProcessRunLock.cpp revision 344779
176259Sgreen//===-- ProcessRunLock.cpp --------------------------------------*- C++ -*-===// 276259Sgreen// 392555Sdes// The LLVM Compiler Infrastructure 476259Sgreen// 576259Sgreen// This file is distributed under the University of Illinois Open Source 676259Sgreen// License. See LICENSE.TXT for details. 776259Sgreen// 876259Sgreen//===----------------------------------------------------------------------===// 976259Sgreen 1076259Sgreen#ifndef _WIN32 1176259Sgreen#include "lldb/Host/ProcessRunLock.h" 1276259Sgreen 1376259Sgreennamespace lldb_private { 1476259Sgreen 1576259SgreenProcessRunLock::ProcessRunLock() : m_running(false) { 1676259Sgreen int err = ::pthread_rwlock_init(&m_rwlock, NULL); 1776259Sgreen (void)err; 1876259Sgreen //#if LLDB_CONFIGURATION_DEBUG 1976259Sgreen // assert(err == 0); 2076259Sgreen //#endif 2176259Sgreen} 2276259Sgreen 2376259SgreenProcessRunLock::~ProcessRunLock() { 2476259Sgreen int err = ::pthread_rwlock_destroy(&m_rwlock); 2576259Sgreen (void)err; 2692555Sdes //#if LLDB_CONFIGURATION_DEBUG 2776259Sgreen // assert(err == 0); 2876259Sgreen //#endif 2976259Sgreen} 3092555Sdes 3176259Sgreenbool ProcessRunLock::ReadTryLock() { 3276259Sgreen ::pthread_rwlock_rdlock(&m_rwlock); 3376259Sgreen if (!m_running) { 3492555Sdes return true; 3576259Sgreen } 3676259Sgreen ::pthread_rwlock_unlock(&m_rwlock); 3792555Sdes return false; 3892555Sdes} 3992555Sdes 4076259Sgreenbool ProcessRunLock::ReadUnlock() { 4192555Sdes return ::pthread_rwlock_unlock(&m_rwlock) == 0; 4292555Sdes} 4392555Sdes 4492555Sdesbool ProcessRunLock::SetRunning() { 4592555Sdes ::pthread_rwlock_wrlock(&m_rwlock); 4692555Sdes m_running = true; 4792555Sdes ::pthread_rwlock_unlock(&m_rwlock); 4892555Sdes return true; 4992555Sdes} 5092555Sdes 5192555Sdesbool ProcessRunLock::TrySetRunning() { 5292555Sdes bool r; 5392555Sdes 5492555Sdes if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) { 5592555Sdes r = !m_running; 5692555Sdes m_running = true; 5792555Sdes ::pthread_rwlock_unlock(&m_rwlock); 5892555Sdes return r; 5992555Sdes } 6092555Sdes return false; 6192555Sdes} 6292555Sdes 6392555Sdesbool ProcessRunLock::SetStopped() { 6492555Sdes ::pthread_rwlock_wrlock(&m_rwlock); 6592555Sdes m_running = false; 6692555Sdes ::pthread_rwlock_unlock(&m_rwlock); 6792555Sdes return true; 6892555Sdes} 6992555Sdes} 7092555Sdes 7192555Sdes#endif 7292555Sdes