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