summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver/source/PThreadMutex.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/debugserver/source/PThreadMutex.h')
-rw-r--r--lldb/tools/debugserver/source/PThreadMutex.h178
1 files changed, 75 insertions, 103 deletions
diff --git a/lldb/tools/debugserver/source/PThreadMutex.h b/lldb/tools/debugserver/source/PThreadMutex.h
index 9a12f6e8e03..c6ec293c5e5 100644
--- a/lldb/tools/debugserver/source/PThreadMutex.h
+++ b/lldb/tools/debugserver/source/PThreadMutex.h
@@ -14,135 +14,107 @@
#ifndef __PThreadMutex_h__
#define __PThreadMutex_h__
-#include <pthread.h>
#include <assert.h>
+#include <pthread.h>
#include <stdint.h>
//#define DEBUG_PTHREAD_MUTEX_DEADLOCKS 1
-#if defined (DEBUG_PTHREAD_MUTEX_DEADLOCKS)
-#define PTHREAD_MUTEX_LOCKER(var, mutex) PThreadMutex::Locker var(mutex, __FUNCTION__, __FILE__, __LINE__)
+#if defined(DEBUG_PTHREAD_MUTEX_DEADLOCKS)
+#define PTHREAD_MUTEX_LOCKER(var, mutex) \
+ PThreadMutex::Locker var(mutex, __FUNCTION__, __FILE__, __LINE__)
#else
#define PTHREAD_MUTEX_LOCKER(var, mutex) PThreadMutex::Locker var(mutex)
#endif
-class PThreadMutex
-{
+class PThreadMutex {
public:
-
- class Locker
- {
- public:
-#if defined (DEBUG_PTHREAD_MUTEX_DEADLOCKS)
-
- Locker(PThreadMutex& m, const char *function, const char *file, int line);
- Locker(PThreadMutex* m, const char *function, const char *file, int line);
- Locker(pthread_mutex_t *mutex, const char *function, const char *file, int line);
- ~Locker();
- void Lock();
- void Unlock();
+ class Locker {
+ public:
+#if defined(DEBUG_PTHREAD_MUTEX_DEADLOCKS)
+
+ Locker(PThreadMutex &m, const char *function, const char *file, int line);
+ Locker(PThreadMutex *m, const char *function, const char *file, int line);
+ Locker(pthread_mutex_t *mutex, const char *function, const char *file,
+ int line);
+ ~Locker();
+ void Lock();
+ void Unlock();
#else
- Locker(PThreadMutex& m) :
- m_pMutex(m.Mutex())
- {
- Lock();
- }
-
- Locker(PThreadMutex* m) :
- m_pMutex(m ? m->Mutex() : NULL)
- {
- Lock();
- }
-
- Locker(pthread_mutex_t *mutex) :
- m_pMutex(mutex)
- {
- Lock();
- }
-
- void Lock()
- {
- if (m_pMutex)
- ::pthread_mutex_lock (m_pMutex);
- }
-
- void Unlock()
- {
- if (m_pMutex)
- ::pthread_mutex_unlock (m_pMutex);
- }
-
- ~Locker()
- {
- Unlock();
- }
+ Locker(PThreadMutex &m) : m_pMutex(m.Mutex()) { Lock(); }
-#endif
-
- // unlock any the current mutex and lock the new one if it is valid
- void Reset(pthread_mutex_t *pMutex = NULL)
- {
- Unlock();
- m_pMutex = pMutex;
- Lock();
- }
- pthread_mutex_t *m_pMutex;
-#if defined (DEBUG_PTHREAD_MUTEX_DEADLOCKS)
- const char *m_function;
- const char *m_file;
- int m_line;
- uint64_t m_lock_time;
-#endif
- };
+ Locker(PThreadMutex *m) : m_pMutex(m ? m->Mutex() : NULL) { Lock(); }
+ Locker(pthread_mutex_t *mutex) : m_pMutex(mutex) { Lock(); }
- PThreadMutex()
- {
- int err;
- err = ::pthread_mutex_init (&m_mutex, NULL); assert(err == 0);
+ void Lock() {
+ if (m_pMutex)
+ ::pthread_mutex_lock(m_pMutex);
}
- PThreadMutex(int type)
- {
- int err;
- ::pthread_mutexattr_t attr;
- err = ::pthread_mutexattr_init (&attr); assert(err == 0);
- err = ::pthread_mutexattr_settype (&attr, type); assert(err == 0);
- err = ::pthread_mutex_init (&m_mutex, &attr); assert(err == 0);
- err = ::pthread_mutexattr_destroy (&attr); assert(err == 0);
+ void Unlock() {
+ if (m_pMutex)
+ ::pthread_mutex_unlock(m_pMutex);
}
- ~PThreadMutex()
- {
- int err;
- err = ::pthread_mutex_destroy (&m_mutex);
- if (err != 0)
- {
- err = Unlock();
- if (err == 0)
- ::pthread_mutex_destroy (&m_mutex);
- }
- }
+ ~Locker() { Unlock(); }
- pthread_mutex_t *Mutex()
- {
- return &m_mutex;
- }
+#endif
- int Lock()
- {
- return ::pthread_mutex_lock (&m_mutex);
+ // unlock any the current mutex and lock the new one if it is valid
+ void Reset(pthread_mutex_t *pMutex = NULL) {
+ Unlock();
+ m_pMutex = pMutex;
+ Lock();
}
-
- int Unlock()
- {
- return ::pthread_mutex_unlock (&m_mutex);
+ pthread_mutex_t *m_pMutex;
+#if defined(DEBUG_PTHREAD_MUTEX_DEADLOCKS)
+ const char *m_function;
+ const char *m_file;
+ int m_line;
+ uint64_t m_lock_time;
+#endif
+ };
+
+ PThreadMutex() {
+ int err;
+ err = ::pthread_mutex_init(&m_mutex, NULL);
+ assert(err == 0);
+ }
+
+ PThreadMutex(int type) {
+ int err;
+ ::pthread_mutexattr_t attr;
+ err = ::pthread_mutexattr_init(&attr);
+ assert(err == 0);
+ err = ::pthread_mutexattr_settype(&attr, type);
+ assert(err == 0);
+ err = ::pthread_mutex_init(&m_mutex, &attr);
+ assert(err == 0);
+ err = ::pthread_mutexattr_destroy(&attr);
+ assert(err == 0);
+ }
+
+ ~PThreadMutex() {
+ int err;
+ err = ::pthread_mutex_destroy(&m_mutex);
+ if (err != 0) {
+ err = Unlock();
+ if (err == 0)
+ ::pthread_mutex_destroy(&m_mutex);
}
+ }
+
+ pthread_mutex_t *Mutex() { return &m_mutex; }
+
+ int Lock() { return ::pthread_mutex_lock(&m_mutex); }
+
+ int Unlock() { return ::pthread_mutex_unlock(&m_mutex); }
protected:
- pthread_mutex_t m_mutex;
+ pthread_mutex_t m_mutex;
};
#endif
OpenPOWER on IntegriCloud