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