1 #include "lldb/Host/ProcessRunLock.h"
2 #include "lldb/Host/windows/windows.h"
6 #if defined(__MINGW32__)
8 typedef struct _RTL_SRWLOCK {
10 } RTL_SRWLOCK, *PRTL_SRWLOCK;
12 // Taken from WinBase.h
13 typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
18 static PSRWLOCK GetLock(lldb::rwlock_t lock)
20 return static_cast<PSRWLOCK>(lock);
23 static bool ReadLock(lldb::rwlock_t rwlock)
25 ::AcquireSRWLockShared(GetLock(rwlock));
29 static bool ReadUnlock(lldb::rwlock_t rwlock)
31 ::ReleaseSRWLockShared(GetLock(rwlock));
35 static bool WriteLock(lldb::rwlock_t rwlock)
37 ::AcquireSRWLockExclusive(GetLock(rwlock));
41 static bool WriteTryLock(lldb::rwlock_t rwlock)
43 return !!::TryAcquireSRWLockExclusive(GetLock(rwlock));
46 static bool WriteUnlock(lldb::rwlock_t rwlock)
48 ::ReleaseSRWLockExclusive(GetLock(rwlock));
52 using namespace lldb_private;
54 ProcessRunLock::ProcessRunLock()
57 m_rwlock = new SRWLOCK;
58 InitializeSRWLock(GetLock(m_rwlock));
61 ProcessRunLock::~ProcessRunLock()
66 bool ProcessRunLock::ReadTryLock()
69 if (m_running == false)
71 ::ReadUnlock(m_rwlock);
75 bool ProcessRunLock::ReadUnlock()
77 return ::ReadUnlock(m_rwlock);
80 bool ProcessRunLock::SetRunning ()
84 WriteUnlock(m_rwlock);
88 bool ProcessRunLock::TrySetRunning ()
90 if (WriteTryLock(m_rwlock))
92 bool was_running = m_running;
94 WriteUnlock(m_rwlock);
100 bool ProcessRunLock::SetStopped ()
104 WriteUnlock(m_rwlock);