//===-- ProcessRunLock.cpp ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef _WIN32 #include "lldb/Host/ProcessRunLock.h" namespace lldb_private { ProcessRunLock::ProcessRunLock() : m_running(false) { int err = ::pthread_rwlock_init(&m_rwlock, nullptr); (void)err; } ProcessRunLock::~ProcessRunLock() { int err = ::pthread_rwlock_destroy(&m_rwlock); (void)err; } bool ProcessRunLock::ReadTryLock() { ::pthread_rwlock_rdlock(&m_rwlock); if (!m_running) { 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 |