#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
