1 #ifndef _WIN32
2 
3 #include "lldb/Host/ProcessRunLock.h"
4 
5 namespace lldb_private {
6 
7 ProcessRunLock::ProcessRunLock() : m_running(false) {
8   int err = ::pthread_rwlock_init(&m_rwlock, NULL);
9   (void)err;
10   //#if LLDB_CONFIGURATION_DEBUG
11   //        assert(err == 0);
12   //#endif
13 }
14 
15 ProcessRunLock::~ProcessRunLock() {
16   int err = ::pthread_rwlock_destroy(&m_rwlock);
17   (void)err;
18   //#if LLDB_CONFIGURATION_DEBUG
19   //        assert(err == 0);
20   //#endif
21 }
22 
23 bool ProcessRunLock::ReadTryLock() {
24   ::pthread_rwlock_rdlock(&m_rwlock);
25   if (m_running == false) {
26     return true;
27   }
28   ::pthread_rwlock_unlock(&m_rwlock);
29   return false;
30 }
31 
32 bool ProcessRunLock::ReadUnlock() {
33   return ::pthread_rwlock_unlock(&m_rwlock) == 0;
34 }
35 
36 bool ProcessRunLock::SetRunning() {
37   ::pthread_rwlock_wrlock(&m_rwlock);
38   m_running = true;
39   ::pthread_rwlock_unlock(&m_rwlock);
40   return true;
41 }
42 
43 bool ProcessRunLock::TrySetRunning() {
44   bool r;
45 
46   if (::pthread_rwlock_trywrlock(&m_rwlock) == 0) {
47     r = !m_running;
48     m_running = true;
49     ::pthread_rwlock_unlock(&m_rwlock);
50     return r;
51   }
52   return false;
53 }
54 
55 bool ProcessRunLock::SetStopped() {
56   ::pthread_rwlock_wrlock(&m_rwlock);
57   m_running = false;
58   ::pthread_rwlock_unlock(&m_rwlock);
59   return true;
60 }
61 }
62 
63 #endif
64