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