1 //===-- ProcessRunLock.cpp --------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
10 #include "lldb/Host/ProcessRunLock.h"
12 namespace lldb_private {
14 ProcessRunLock::ProcessRunLock() : m_running(false) {
15 int err = ::pthread_rwlock_init(&m_rwlock, nullptr);
19 ProcessRunLock::~ProcessRunLock() {
20 int err = ::pthread_rwlock_destroy(&m_rwlock);
24 bool ProcessRunLock::ReadTryLock() {
25 ::pthread_rwlock_rdlock(&m_rwlock);
29 ::pthread_rwlock_unlock(&m_rwlock);
33 bool ProcessRunLock::ReadUnlock() {
34 return ::pthread_rwlock_unlock(&m_rwlock) == 0;
37 bool ProcessRunLock::SetRunning() {
38 ::pthread_rwlock_wrlock(&m_rwlock);
40 ::pthread_rwlock_unlock(&m_rwlock);
44 bool ProcessRunLock::TrySetRunning() {
47 if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) {
50 ::pthread_rwlock_unlock(&m_rwlock);
56 bool ProcessRunLock::SetStopped() {
57 ::pthread_rwlock_wrlock(&m_rwlock);
59 ::pthread_rwlock_unlock(&m_rwlock);