1//===-- ProcessRunLock.cpp ------------------------------------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef _WIN32 10#include "lldb/Host/ProcessRunLock.h" 11 12namespace lldb_private { 13 14ProcessRunLock::ProcessRunLock() { 15 int err = ::pthread_rwlock_init(&m_rwlock, nullptr); 16 (void)err; 17} 18 19ProcessRunLock::~ProcessRunLock() { 20 int err = ::pthread_rwlock_destroy(&m_rwlock); 21 (void)err; 22} 23 24bool ProcessRunLock::ReadTryLock() { 25 ::pthread_rwlock_rdlock(&m_rwlock); 26 if (!m_running) { 27 // coverity[missing_unlock] 28 return true; 29 } 30 ::pthread_rwlock_unlock(&m_rwlock); 31 return false; 32} 33 34bool ProcessRunLock::ReadUnlock() { 35 return ::pthread_rwlock_unlock(&m_rwlock) == 0; 36} 37 38bool ProcessRunLock::SetRunning() { 39 ::pthread_rwlock_wrlock(&m_rwlock); 40 m_running = true; 41 ::pthread_rwlock_unlock(&m_rwlock); 42 return true; 43} 44 45bool ProcessRunLock::TrySetRunning() { 46 bool r; 47 48 if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) { 49 r = !m_running; 50 m_running = true; 51 ::pthread_rwlock_unlock(&m_rwlock); 52 return r; 53 } 54 return false; 55} 56 57bool ProcessRunLock::SetStopped() { 58 ::pthread_rwlock_wrlock(&m_rwlock); 59 m_running = false; 60 ::pthread_rwlock_unlock(&m_rwlock); 61 return true; 62} 63} 64 65#endif 66