ProcessRunLock.cpp revision 263363
1#ifndef _WIN32
2
3#include "lldb/Host/ProcessRunLock.h"
4
5namespace lldb_private {
6
7    ProcessRunLock::ProcessRunLock()
8        : m_running(false)
9    {
10        int err = ::pthread_rwlock_init(&m_rwlock, NULL); (void) err;
11        //#if LLDB_CONFIGURATION_DEBUG
12        //        assert(err == 0);
13        //#endif
14    }
15
16    ProcessRunLock::~ProcessRunLock()
17    {
18        int err = ::pthread_rwlock_destroy(&m_rwlock); (void) err;
19        //#if LLDB_CONFIGURATION_DEBUG
20        //        assert(err == 0);
21        //#endif
22    }
23
24    bool ProcessRunLock::ReadTryLock()
25    {
26        ::pthread_rwlock_rdlock(&m_rwlock);
27        if (m_running == false)
28        {
29            return true;
30        }
31        ::pthread_rwlock_unlock(&m_rwlock);
32        return false;
33    }
34
35    bool ProcessRunLock::ReadUnlock()
36    {
37        return ::pthread_rwlock_unlock(&m_rwlock) == 0;
38    }
39
40    bool ProcessRunLock::SetRunning()
41    {
42        ::pthread_rwlock_wrlock(&m_rwlock);
43        m_running = true;
44        ::pthread_rwlock_unlock(&m_rwlock);
45        return true;
46    }
47
48    bool ProcessRunLock::TrySetRunning()
49    {
50        bool r;
51
52        if (::pthread_rwlock_trywrlock(&m_rwlock) == 0)
53        {
54            r = !m_running;
55            m_running = true;
56            ::pthread_rwlock_unlock(&m_rwlock);
57            return r;
58        }
59        return false;
60    }
61
62    bool ProcessRunLock::SetStopped()
63    {
64        ::pthread_rwlock_wrlock(&m_rwlock);
65        m_running = false;
66        ::pthread_rwlock_unlock(&m_rwlock);
67        return true;
68    }
69}
70
71#endif
72