forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
#ifndef _WIN32
 | 
						|
 | 
						|
#include "lldb/Host/ProcessRunLock.h"
 | 
						|
 | 
						|
namespace lldb_private {
 | 
						|
 | 
						|
    ProcessRunLock::ProcessRunLock()
 | 
						|
        : m_running(false)
 | 
						|
    {
 | 
						|
        int err = ::pthread_rwlock_init(&m_rwlock, NULL); (void) err;
 | 
						|
        //#if LLDB_CONFIGURATION_DEBUG
 | 
						|
        //        assert(err == 0);
 | 
						|
        //#endif
 | 
						|
    }
 | 
						|
 | 
						|
    ProcessRunLock::~ProcessRunLock()
 | 
						|
    {
 | 
						|
        int err = ::pthread_rwlock_destroy(&m_rwlock); (void) err;
 | 
						|
        //#if LLDB_CONFIGURATION_DEBUG
 | 
						|
        //        assert(err == 0);
 | 
						|
        //#endif
 | 
						|
    }
 | 
						|
 | 
						|
    bool ProcessRunLock::ReadTryLock()
 | 
						|
    {
 | 
						|
        ::pthread_rwlock_rdlock(&m_rwlock);
 | 
						|
        if (m_running == false)
 | 
						|
        {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
        ::pthread_rwlock_unlock(&m_rwlock);
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    bool ProcessRunLock::ReadUnlock()
 | 
						|
    {
 | 
						|
        return ::pthread_rwlock_unlock(&m_rwlock) == 0;
 | 
						|
    }
 | 
						|
 | 
						|
    bool ProcessRunLock::SetRunning()
 | 
						|
    {
 | 
						|
        ::pthread_rwlock_wrlock(&m_rwlock);
 | 
						|
        m_running = true;
 | 
						|
        ::pthread_rwlock_unlock(&m_rwlock);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    bool ProcessRunLock::TrySetRunning()
 | 
						|
    {
 | 
						|
        bool r;
 | 
						|
 | 
						|
        if (::pthread_rwlock_trywrlock(&m_rwlock) == 0)
 | 
						|
        {
 | 
						|
            r = !m_running;
 | 
						|
            m_running = true;
 | 
						|
            ::pthread_rwlock_unlock(&m_rwlock);
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    bool ProcessRunLock::SetStopped()
 | 
						|
    {
 | 
						|
        ::pthread_rwlock_wrlock(&m_rwlock);
 | 
						|
        m_running = false;
 | 
						|
        ::pthread_rwlock_unlock(&m_rwlock);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |