#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
