From 482d898333facf53bd3208cf5e44a0cf3e1f4f3b Mon Sep 17 00:00:00 2001
From: phunkyfish <phunkyfish@gmail.com>
Date: Thu, 8 Oct 2020 14:59:55 +0100
Subject: [PATCH] Use std::thread, std::mutex, condition_variable instead of
 event

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 src/lib/tsreader/DeMultiplexer.cpp   |  2 +-
 src/lib/tsreader/DeMultiplexer.h     |  4 +-
 src/lib/tsreader/FileReader.cpp      |  2 +-
 src/lib/tsreader/MemoryBuffer.cpp    | 15 +++--
 src/lib/tsreader/MemoryBuffer.h      |  7 +-
 src/lib/tsreader/MemoryReader.h      |  1 +
 src/lib/tsreader/MemorySink.cpp      |  2 +-
 src/lib/tsreader/MemorySink.h        |  4 +-
 src/lib/tsreader/MepoRTSPClient.cpp  | 28 ++++----
 src/lib/tsreader/MepoRTSPClient.h    | 10 ++-
 src/lib/tsreader/MultiFileReader.cpp |  9 ++-
 src/os-dependent.h                   | 95 ++++++++++++++++++++++++++++
 src/pvrclient-mediaportal.cpp        | 29 ++++-----
 src/pvrclient-mediaportal.h          | 21 +++---
 14 files changed, 168 insertions(+), 61 deletions(-)

diff --git a/src/lib/tsreader/DeMultiplexer.cpp b/src/lib/tsreader/DeMultiplexer.cpp
index 436e452..3d0d9a2 100644
--- a/src/lib/tsreader/DeMultiplexer.cpp
+++ b/src/lib/tsreader/DeMultiplexer.cpp
@@ -104,7 +104,7 @@ namespace MPTV
         if (m_filter.IsSeeking())
             return 0;       // Ambass : to check
 
-        P8PLATFORM::CLockObject lock(m_sectionRead);
+        std::lock_guard<std::mutex> lock(m_sectionRead);
         if (NULL == m_reader)
             return 0;
 
diff --git a/src/lib/tsreader/DeMultiplexer.h b/src/lib/tsreader/DeMultiplexer.h
index c7cd577..72ed87d 100644
--- a/src/lib/tsreader/DeMultiplexer.h
+++ b/src/lib/tsreader/DeMultiplexer.h
@@ -37,7 +37,7 @@
 #include "PacketSync.h"
 #include "TSHeader.h"
 #include "PatParser.h"
-#include "p8-platform/threads/mutex.h"
+#include <mutex>
 
 namespace MPTV
 {
@@ -60,7 +60,7 @@ namespace MPTV
     private:
         unsigned long long m_LastDataFromRtsp;
         bool m_bEndOfFile;
-        P8PLATFORM::CMutex m_sectionRead;
+        std::mutex m_sectionRead;
         FileReader* m_reader;
         CPatParser m_patParser;
         CTsReader& m_filter;
diff --git a/src/lib/tsreader/FileReader.cpp b/src/lib/tsreader/FileReader.cpp
index 73b23af..358b05f 100644
--- a/src/lib/tsreader/FileReader.cpp
+++ b/src/lib/tsreader/FileReader.cpp
@@ -35,7 +35,7 @@
 #include "FileReader.h"
 #include <kodi/General.h> //for kodi::Log
 #include "TSDebug.h"
-#include "p8-platform/threads/threads.h"
+#include "os-dependent.h"
 #include <algorithm> //std::min, std::max
 #include "utils.h"
 #include <errno.h>
diff --git a/src/lib/tsreader/MemoryBuffer.cpp b/src/lib/tsreader/MemoryBuffer.cpp
index 0e736f2..b5400da 100644
--- a/src/lib/tsreader/MemoryBuffer.cpp
+++ b/src/lib/tsreader/MemoryBuffer.cpp
@@ -29,7 +29,7 @@
 
 #ifdef LIVE555
 
-#include "p8-platform/threads/mutex.h"
+#include "os-dependent.h"
 #include "MemoryBuffer.h"
 #include <kodi/General.h> //for kodi::Log
 #include "TSDebug.h"
@@ -56,7 +56,7 @@ bool CMemoryBuffer::IsRunning()
 
 void CMemoryBuffer::Clear()
 {
-  P8PLATFORM::CLockObject BufferLock(m_BufferLock);
+  std::lock_guard<std::mutex> BufferLock(m_BufferLock);
   std::vector<BufferItem *>::iterator it = m_Array.begin();
 
   for (auto& item : m_Array)
@@ -104,14 +104,17 @@ size_t CMemoryBuffer::ReadFromBuffer(unsigned char *pbData, size_t lDataLength)
   {
     if (!m_bRunning)
       return 0;
-    m_event.Wait(5000);
+
+    std::unique_lock<std::mutex> lock(m_BufferLock);
+    m_condition.wait_for(lock, std::chrono::milliseconds(5000));
+
     if (!m_bRunning)
       return 0;
   }
 
   // kodi::Log(ADDON_LOG_DEBUG, "get..%d/%d", lDataLength, m_BytesInBuffer);
   size_t bytesWritten = 0;
-  P8PLATFORM::CLockObject BufferLock(m_BufferLock);
+  std::lock_guard<std::mutex> BufferLock(m_BufferLock);
 
   while (bytesWritten < lDataLength)
   {
@@ -172,7 +175,7 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength)
   memcpy(item->data, pbData, lDataLength);
   bool sleep = false;
   {
-    P8PLATFORM::CLockObject BufferLock(m_BufferLock);
+    std::lock_guard<std::mutex> BufferLock(m_BufferLock);
     m_Array.push_back(item);
     m_BytesInBuffer += lDataLength;
 
@@ -192,7 +195,7 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength)
     }
     if (m_BytesInBuffer > 0)
     {
-      m_event.Broadcast();
+      m_condition.notify_one();
     }
   }
 
diff --git a/src/lib/tsreader/MemoryBuffer.h b/src/lib/tsreader/MemoryBuffer.h
index 080553b..4f8708f 100644
--- a/src/lib/tsreader/MemoryBuffer.h
+++ b/src/lib/tsreader/MemoryBuffer.h
@@ -30,7 +30,8 @@
 
 #ifdef LIVE555
 
-#include "p8-platform/threads/mutex.h"
+#include <condition_variable>
+#include <mutex>
 #include <vector>
 
 class CMemoryBuffer
@@ -55,9 +56,9 @@ class CMemoryBuffer
 
   protected:
     std::vector<BufferItem *> m_Array;
-    P8PLATFORM::CMutex m_BufferLock;
+    std::mutex m_BufferLock;
     size_t    m_BytesInBuffer;
-		P8PLATFORM::CEvent m_event;
+    std::condition_variable m_condition;
     bool m_bRunning;
 };
 #endif //LIVE555
diff --git a/src/lib/tsreader/MemoryReader.h b/src/lib/tsreader/MemoryReader.h
index fef4f98..288984b 100644
--- a/src/lib/tsreader/MemoryReader.h
+++ b/src/lib/tsreader/MemoryReader.h
@@ -32,6 +32,7 @@
 
 #include "FileReader.h"
 #include "MemoryBuffer.h"
+#include "os-dependent.h"
 
 namespace MPTV
 {
diff --git a/src/lib/tsreader/MemorySink.cpp b/src/lib/tsreader/MemorySink.cpp
index dafef56..af8b74c 100644
--- a/src/lib/tsreader/MemorySink.cpp
+++ b/src/lib/tsreader/MemorySink.cpp
@@ -84,7 +84,7 @@ void CMemorySink::addData(unsigned char* data, size_t dataSize, struct timeval U
     return;
   }
 
-  P8PLATFORM::CLockObject BufferLock(m_BufferLock);
+  std::lock_guard<std::mutex> BufferLock(m_BufferLock);
 
   m_bReEntrant = true;
   m_buffer.PutBuffer(data, dataSize);
diff --git a/src/lib/tsreader/MemorySink.h b/src/lib/tsreader/MemorySink.h
index cc0f3c8..22d91c6 100644
--- a/src/lib/tsreader/MemorySink.h
+++ b/src/lib/tsreader/MemorySink.h
@@ -35,7 +35,7 @@
 #endif
 
 #include "MemoryBuffer.h"
-#include "p8-platform/threads/mutex.h"
+#include <mutex>
 
 class CMemorySink: public MediaSink
 {
@@ -57,7 +57,7 @@ class CMemorySink: public MediaSink
   private: // redefined virtual functions:
     virtual Boolean continuePlaying();
 
-		P8PLATFORM::CMutex m_BufferLock;
+		std::mutex m_BufferLock;
     unsigned char* m_pSubmitBuffer;
     int   m_iSubmitBufferPos;
     bool  m_bReEntrant;
diff --git a/src/lib/tsreader/MepoRTSPClient.cpp b/src/lib/tsreader/MepoRTSPClient.cpp
index ccd6761..688ae84 100644
--- a/src/lib/tsreader/MepoRTSPClient.cpp
+++ b/src/lib/tsreader/MepoRTSPClient.cpp
@@ -54,7 +54,7 @@ CRTSPClient::CRTSPClient()
   m_env = NULL;
   m_fDuration = 0.0f;
   m_url[0] = '\0';
-  m_bRunning = false;
+  m_running = false;
 }
 
 CRTSPClient::~CRTSPClient()
@@ -496,7 +496,9 @@ void CRTSPClient::StartBufferThread()
 
   if (!m_BufferThreadActive)
   {
-    CreateThread();
+    m_running = true;
+    m_thread = std::thread([&] { Process(); });
+
     m_BufferThreadActive = true;
   }
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StartBufferThread done");
@@ -505,11 +507,12 @@ void CRTSPClient::StartBufferThread()
 void CRTSPClient::StopBufferThread()
 {
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StopBufferThread");
-  m_bRunning = false;
+  m_running = false;
   if (!m_BufferThreadActive)
     return;
 
-  StopThread();
+  if (m_thread.joinable())
+    m_thread.join();
 
   m_BufferThreadActive = false;
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StopBufferThread done");
@@ -539,25 +542,22 @@ void CRTSPClient::FillBuffer(unsigned long byteCount)
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Fillbuffer...%d/%d\n", byteCount, m_buffer->Size() );
 }
 
-void *CRTSPClient::Process()
+void CRTSPClient::Process()
 {
   m_BufferThreadActive = true;
-  m_bRunning = true;
 
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient:: thread started");
 
-  while (m_env != NULL && !IsStopped())
+  while (m_env != NULL && m_running)
   {
     m_env->taskScheduler().doEventLoop();
-    if (m_bRunning == false)
+    if (m_running == false)
       break;
   }
 
   kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient:: thread stopped");
 
   m_BufferThreadActive = false;
-
-  return NULL;
 }
 
 void CRTSPClient::Continue()
@@ -582,8 +582,12 @@ bool CRTSPClient::Pause()
   if (m_ourClient != NULL && m_session != NULL)
   {
     kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Pause() stopthread");
-    StopThread(10000);                    // Ambass : sometimes 100mS ( prev value ) is not enough and thread is not stopped.
-                                                 //          now stopping takes around 5 secs ?!?! why ????
+    // Ambass : sometimes 100mS ( prev value ) is not enough and thread is not stopped.
+    //          now stopping takes around 5 secs ?!?! why ????
+    m_running = false;
+    if (m_thread.joinable())
+      m_thread.join();
+
     kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Pause() thread stopped");
     RTSPClient* rtspClient=(RTSPClient*)m_ourClient;
     rtspClient->pauseMediaSession(*m_session);
diff --git a/src/lib/tsreader/MepoRTSPClient.h b/src/lib/tsreader/MepoRTSPClient.h
index bd6e578..9bb0421 100644
--- a/src/lib/tsreader/MepoRTSPClient.h
+++ b/src/lib/tsreader/MepoRTSPClient.h
@@ -31,7 +31,8 @@
 
 #ifdef LIVE555
 
-#include "p8-platform/threads/threads.h"
+#include <atomic>
+#include <thread>
 #include "lib/tsreader/MemoryBuffer.h"
 
 #include "liveMedia.hh"
@@ -41,7 +42,7 @@
 
 #define RTSP_URL_BUFFERSIZE 2048
 
-class CRTSPClient: public P8PLATFORM::CThread
+class CRTSPClient
 {
 public:
   CRTSPClient();
@@ -101,7 +102,7 @@ class CRTSPClient: public P8PLATFORM::CThread
 
   // Thread
 private:
-  virtual void *Process(void);
+  void Process();
   void StartBufferThread();
   void StopBufferThread();
   bool m_BufferThreadActive;
@@ -113,5 +114,8 @@ class CRTSPClient: public P8PLATFORM::CThread
   bool m_bRunning;
   bool m_bPaused;
   char m_outFileName[1000];
+
+  std::atomic<bool> m_running = {false};
+  std::thread m_thread;
 };
 #endif //LIVE555
diff --git a/src/lib/tsreader/MultiFileReader.cpp b/src/lib/tsreader/MultiFileReader.cpp
index 21fd7b2..5106418 100644
--- a/src/lib/tsreader/MultiFileReader.cpp
+++ b/src/lib/tsreader/MultiFileReader.cpp
@@ -35,17 +35,16 @@
 #include "MultiFileReader.h"
 #include <kodi/General.h> //for kodi::Log
 #include <kodi/Filesystem.h>
+#include <kodi/tools/EndTime.h>
 #include "TSDebug.h"
 #include <string>
 #include "utils.h"
 #include <algorithm>
-#include "p8-platform/threads/threads.h"
 #include <inttypes.h>
+#include "os-dependent.h"
 
 #include <thread>
 
-using namespace P8PLATFORM;
-
 //Maximum time in msec to wait for the buffer file to become available - Needed for DVB radio (this sometimes takes some time)
 #define MAX_BUFFER_TIMEOUT 1500
 
@@ -121,12 +120,12 @@ namespace MPTV
         if (RefreshTSBufferFile() == S_FALSE)
         {
             // For radio the buffer sometimes needs some time to become available, so wait and try it more than once
-            P8PLATFORM::CTimeout timeout(MAX_BUFFER_TIMEOUT);
+            kodi::tools::CEndTime timeout(MAX_BUFFER_TIMEOUT);
 
             do
             {
                 std::this_thread::sleep_for(std::chrono::milliseconds(100));
-                if (timeout.TimeLeft() == 0)
+                if (timeout.MillisLeft() == 0)
                 {
                     kodi::Log(ADDON_LOG_ERROR, "MultiFileReader: timed out while waiting for buffer file to become available");
                     kodi::QueueNotification(QUEUE_ERROR, "", "Time out while waiting for buffer file");
diff --git a/src/os-dependent.h b/src/os-dependent.h
index cdc6980..28c162c 100644
--- a/src/os-dependent.h
+++ b/src/os-dependent.h
@@ -11,6 +11,13 @@
 
 #if (defined(_WIN32) || defined(_WIN64))
 
+#include <wchar.h>
+
+/* Handling of 2-byte Windows wchar strings */
+#define WcsLen wcslen
+#define WcsToMbs wcstombs
+typedef wchar_t Wchar_t; /* sizeof(wchar_t) = 2 bytes on Windows */
+
 #ifndef _SSIZE_T_DEFINED
 #ifdef  _WIN64
 typedef __int64    ssize_t;
@@ -20,20 +27,108 @@ typedef _W64 int   ssize_t;
 #define _SSIZE_T_DEFINED
 #endif
 
+/* Prevent deprecation warnings */
+#define strnicmp _strnicmp
+
+#define PATH_SEPARATOR_CHAR '\\'
+
 #else
 
 #if (defined(TARGET_LINUX) || defined(TARGET_DARWIN))
 #include <sys/types.h>
 #include <chrono>
 #include <cstring>
+
+#define strnicmp(X,Y,N) strncasecmp(X,Y,N)
+
 inline unsigned long long GetTickCount64(void)
 {
   auto now = std::chrono::steady_clock::now();
   return std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
 };
+
+#define PATH_SEPARATOR_CHAR '/'
+
+#if defined(__APPLE__)
+// for HRESULT
+#include <CoreFoundation/CFPlugInCOM.h>
+#endif
+
+/* Handling of 2-byte Windows wchar strings on non-Windows targets
+ * Used by The MediaPortal and ForTheRecord pvr addons
+ */
+typedef uint16_t Wchar_t; /* sizeof(wchar_t) = 4 bytes on Linux, but the MediaPortal buffer files have 2-byte wchars */
+
+/* This is a replacement of the Windows wcslen() function which assumes that
+ * wchar_t is a 2-byte character.
+ * It is used for processing Windows wchar strings
+ */
+inline size_t WcsLen(const Wchar_t *str)
+{
+  const unsigned short *eos = (const unsigned short*)str;
+  while( *eos++ ) ;
+  return( (size_t)(eos - (const unsigned short*)str) -1);
+};
+
+/* This is a replacement of the Windows wcstombs() function which assumes that
+ * wchar_t is a 2-byte character.
+ * It is used for processing Windows wchar strings
+ */
+inline size_t WcsToMbs(char *s, const Wchar_t *w, size_t n)
+{
+  size_t i = 0;
+  const unsigned short *wc = (const unsigned short*) w;
+  while(wc[i] && (i < n))
+  {
+    s[i] = wc[i];
+    ++i;
+  }
+  if (i < n) s[i] = '\0';
+
+  return (i);
+};
+
 #endif /* TARGET_LINUX || TARGET_DARWIN */
 
 #endif
 
+typedef long LONG;
+#if !defined(__APPLE__)
+typedef LONG HRESULT;
+#endif
+
+#ifndef FAILED
+#define FAILED(Status) ((HRESULT)(Status)<0)
+#endif
+
+#ifndef SUCCEEDED
+#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
+#endif
+
+#define _FILE_OFFSET_BITS 64
+#define FILE_BEGIN              0
+#define FILE_CURRENT            1
+#define FILE_END                2
+
+#ifndef S_OK
+#define S_OK           0L
+#endif
+
+#ifndef S_FALSE
+#define S_FALSE        1L
+#endif
+
+// Error codes
+#define ERROR_FILENAME_EXCED_RANGE 206L
+#define ERROR_INVALID_NAME         123L
+
+#ifndef E_OUTOFMEMORY
+#define E_OUTOFMEMORY              0x8007000EL
+#endif
+
+#ifndef E_FAIL
+#define E_FAIL                     0x8004005EL
+#endif
+
 // Additional typedefs
 typedef uint8_t byte;
diff --git a/src/pvrclient-mediaportal.cpp b/src/pvrclient-mediaportal.cpp
index 851b940..c1052e3 100644
--- a/src/pvrclient-mediaportal.cpp
+++ b/src/pvrclient-mediaportal.cpp
@@ -28,8 +28,6 @@
 #include <kodi/General.h>
 #include <kodi/Filesystem.h>
 
-#include <thread>
-
 using namespace kodi::tools;
 using namespace std;
 using namespace MPTV;
@@ -70,7 +68,6 @@ cPVRClientMediaPortal::cPVRClientMediaPortal(KODI_HANDLE instance, const std::st
   m_BackendTime            = 0;
   m_tsreader               = NULL;
   m_genretable             = NULL;
-  m_iLastRecordingUpdate   = 0;
   m_signalStateCounter     = 0;
   m_iSignal                = 0;
   m_iSNR                   = 0;
@@ -99,7 +96,7 @@ string cPVRClientMediaPortal::SendCommand(const char* command)
 
 string cPVRClientMediaPortal::SendCommand(const string& command)
 {
-  P8PLATFORM::CLockObject critsec(m_mutex);
+  std::lock_guard<std::mutex> critsec(m_mutex);
 
   if ( !m_tcpclient->send(command) )
   {
@@ -174,10 +171,10 @@ ADDON_STATUS cPVRClientMediaPortal::TryConnect()
     case PVR_CONNECTION_STATE_SERVER_UNREACHABLE:
       kodi::Log(ADDON_LOG_ERROR, "Could not connect to MediaPortal TV Server backend.");
       // Start background thread for connecting to the backend
-      if (!IsRunning())
+      if (!m_running)
       {
-        kodi::Log(ADDON_LOG_INFO, "Waiting for a connection in the background.");
-        CreateThread();
+        m_running = true;
+        m_thread = std::thread([&] { Process(); });
       }
       return ADDON_STATUS_LOST_CONNECTION;
     case PVR_CONNECTION_STATE_CONNECTING:
@@ -190,7 +187,7 @@ ADDON_STATUS cPVRClientMediaPortal::TryConnect()
 
 PVR_CONNECTION_STATE cPVRClientMediaPortal::Connect(bool updateConnectionState)
 {
-  P8PLATFORM::CLockObject critsec(m_connectionMutex);
+  std::lock_guard<std::mutex> critsec(m_connectionMutex);
 
   string result;
 
@@ -317,9 +314,11 @@ void cPVRClientMediaPortal::Disconnect()
 
   kodi::Log(ADDON_LOG_INFO, "Disconnect");
 
-  if (IsRunning())
+  if (m_running)
   {
-    StopThread(1000);
+    m_running = false;
+    if (m_thread.joinable())
+      m_thread.join();
   }
 
   if (m_tcpclient->is_valid() && m_bTimeShiftStarted)
@@ -361,14 +360,14 @@ bool cPVRClientMediaPortal::IsUp()
   }
 }
 
-void* cPVRClientMediaPortal::Process(void)
+void cPVRClientMediaPortal::Process()
 {
   kodi::Log(ADDON_LOG_DEBUG, "Background thread started.");
 
   bool keepWaiting = true;
   PVR_CONNECTION_STATE state;
 
-  while (!IsStopped() && keepWaiting)
+  while (m_running && keepWaiting)
   {
     state = Connect(false);
 
@@ -396,8 +395,6 @@ void* cPVRClientMediaPortal::Process(void)
   SetConnectionState(state);
 
   kodi::Log(ADDON_LOG_DEBUG, "Background thread finished.");
-
-  return NULL;
 }
 
 
@@ -1188,7 +1185,7 @@ PVR_ERROR cPVRClientMediaPortal::GetRecordings(bool deleted, kodi::addon::PVRRec
     }
   }
 
-  m_iLastRecordingUpdate = P8PLATFORM::GetTimeMs();
+  m_iLastRecordingUpdate = std::chrono::system_clock::now();
 
   return PVR_ERROR_NO_ERROR;
 }
@@ -1383,7 +1380,7 @@ PVR_ERROR cPVRClientMediaPortal::GetTimers(kodi::addon::PVRTimersResultSet& resu
     }
   }
 
-  if ( P8PLATFORM::GetTimeMs() >  m_iLastRecordingUpdate + 15000)
+  if ( std::chrono::system_clock::now() >  m_iLastRecordingUpdate + std::chrono::milliseconds(15000))
   {
     kodi::addon::CInstancePVRClient::TriggerRecordingUpdate();
   }
diff --git a/src/pvrclient-mediaportal.h b/src/pvrclient-mediaportal.h
index 3087634..e5da832 100644
--- a/src/pvrclient-mediaportal.h
+++ b/src/pvrclient-mediaportal.h
@@ -7,6 +7,10 @@
 
 #pragma once
 
+#include <atomic>
+#include <chrono>
+#include <mutex>
+#include <thread>
 #include <vector>
 
 /* Master defines for client control */
@@ -17,8 +21,6 @@
 #include "Cards.h"
 #include "epg.h"
 #include "channels.h"
-#include "p8-platform/threads/mutex.h"
-#include "p8-platform/threads/threads.h"
 
 /* Use a forward declaration here. Including RTSPClient.h via TSReader.h at this point gives compile errors */
 namespace MPTV
@@ -28,9 +30,7 @@ namespace MPTV
 class cRecording;
 
 class ATTRIBUTE_HIDDEN cPVRClientMediaPortal
-  : public kodi::addon::CInstancePVRClient,
-    public P8PLATFORM::PreventCopy,
-    public P8PLATFORM::CThread
+  : public kodi::addon::CInstancePVRClient
 {
 public:
   /* Class interface */
@@ -110,7 +110,7 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal
 
 private:
   /* TVServerKodi Listening Thread */
-  void* Process(void);
+  void Process();
   PVR_CONNECTION_STATE Connect(bool updateConnectionState = true);
 
   void LoadGenreTable(void);
@@ -134,9 +134,9 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal
   time_t                  m_BackendTime;
   CCards                  m_cCards;
   CGenreTable*            m_genretable;
-  P8PLATFORM::CMutex      m_mutex;
-  P8PLATFORM::CMutex      m_connectionMutex;
-  int64_t                 m_iLastRecordingUpdate;
+  std::mutex              m_mutex;
+  std::mutex              m_connectionMutex;
+  std::chrono::system_clock::time_point m_iLastRecordingUpdate;
   MPTV::CTsReader*        m_tsreader;
   std::map<int,cChannel>  m_channels;
   int                     m_signalStateCounter;
@@ -145,6 +145,9 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal
 
   cRecording*             m_lastSelectedRecording;
 
+  std::atomic<bool> m_running = {false};
+  std::thread m_thread;
+
   //Used for TV Server communication:
   std::string SendCommand(const char* command);
   std::string SendCommand(const std::string& command);
