cec: add a bRecursive parameter to the constructor of CMutex
[deb_libcec.git] / src / lib / platform / threads.h
index 4ae5ac72557433464e96236e9821aee8ba414561..a258081ccef8bbdf6a5bc8f33826fbaf26ae6c84 100644 (file)
@@ -32,6 +32,7 @@
  */
 
 #include "os-dependent.h"
+#include <stdint.h>
 
 namespace CEC
 {
@@ -43,9 +44,10 @@ namespace CEC
     CCondition(void);
     virtual ~CCondition(void);
 
+    void Broadcast(void);
     void Signal(void);
-    bool Wait(CMutex *mutex, int64_t iTimeout);
-    static void Sleep(int iTimeout);
+    bool Wait(CMutex *mutex, uint32_t iTimeout = 0);
+    static void Sleep(uint32_t iTimeout);
 
   private:
     pthread_cond_t  m_cond;
@@ -54,7 +56,7 @@ namespace CEC
   class CMutex
   {
   public:
-    CMutex(void);
+    CMutex(bool bRecursive = true);
     virtual ~CMutex(void);
 
     bool TryLock(void);
@@ -62,12 +64,15 @@ namespace CEC
     void Unlock(void);
 
     pthread_mutex_t m_mutex;
+
+  private:
+    static pthread_mutexattr_t *GetMutexAttribute();
   };
 
   class CLockObject
   {
   public:
-    CLockObject(CMutex *mutex);
+    CLockObject(CMutex *mutex, bool bTryLock = false);
     ~CLockObject(void);
 
     bool IsLocked(void) const { return m_bLocked; }
@@ -86,15 +91,21 @@ namespace CEC
     virtual ~CThread(void);
 
     virtual bool IsRunning(void) const { return m_bRunning; }
-    virtual bool CreateThread(void);
-    virtual void StopThread(bool bWaitForExit = true);
+    virtual bool CreateThread(bool bWait = true);
+    virtual bool StopThread(bool bWaitForExit = true);
+    virtual bool IsStopped(void) const { return m_bStop; };
+    virtual bool Sleep(uint32_t iTimeout);
 
     static void *ThreadHandler(CThread *thread);
     virtual void *Process(void) = 0;
 
   protected:
-    pthread_t m_thread;
-    bool      m_bRunning;
-    bool      m_bStop;
+    CCondition m_threadCondition;
+
+  private:
+    pthread_t  m_thread;
+    CMutex     m_threadMutex;
+    bool       m_bStop;
+    bool       m_bRunning;
   };
 };