ProcessRunLock.cpp revision 314564
1//===-- ProcessRunLock.cpp --------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef _WIN32
11#include "lldb/Host/ProcessRunLock.h"
12
13namespace lldb_private {
14
15ProcessRunLock::ProcessRunLock() : m_running(false) {
16  int err = ::pthread_rwlock_init(&m_rwlock, NULL);
17  (void)err;
18  //#if LLDB_CONFIGURATION_DEBUG
19  //        assert(err == 0);
20  //#endif
21}
22
23ProcessRunLock::~ProcessRunLock() {
24  int err = ::pthread_rwlock_destroy(&m_rwlock);
25  (void)err;
26  //#if LLDB_CONFIGURATION_DEBUG
27  //        assert(err == 0);
28  //#endif
29}
30
31bool ProcessRunLock::ReadTryLock() {
32  ::pthread_rwlock_rdlock(&m_rwlock);
33  if (m_running == false) {
34    return true;
35  }
36  ::pthread_rwlock_unlock(&m_rwlock);
37  return false;
38}
39
40bool ProcessRunLock::ReadUnlock() {
41  return ::pthread_rwlock_unlock(&m_rwlock) == 0;
42}
43
44bool ProcessRunLock::SetRunning() {
45  ::pthread_rwlock_wrlock(&m_rwlock);
46  m_running = true;
47  ::pthread_rwlock_unlock(&m_rwlock);
48  return true;
49}
50
51bool ProcessRunLock::TrySetRunning() {
52  bool r;
53
54  if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) {
55    r = !m_running;
56    m_running = true;
57    ::pthread_rwlock_unlock(&m_rwlock);
58    return r;
59  }
60  return false;
61}
62
63bool ProcessRunLock::SetStopped() {
64  ::pthread_rwlock_wrlock(&m_rwlock);
65  m_running = false;
66  ::pthread_rwlock_unlock(&m_rwlock);
67  return true;
68}
69}
70
71#endif
72