[SCM] kodi-pvr-vdr-vnsi/master: VNSIData: move m_queue and m_mutex to new class

tiber-guest at users.alioth.debian.org tiber-guest at users.alioth.debian.org
Sun Feb 28 15:46:51 UTC 2016


The following commit has been merged in the master branch:
commit 79c1aa770ea6ff0a2eac6cede5ed3c117863bc46
Author: Max Kellermann <max at duempel.org>
Date:   Sun Nov 22 00:07:40 2015 +0100

    VNSIData: move m_queue and m_mutex to new class

diff --git a/src/VNSIData.cpp b/src/VNSIData.cpp
index 67f15c7..6e78d23 100644
--- a/src/VNSIData.cpp
+++ b/src/VNSIData.cpp
@@ -28,6 +28,37 @@
 using namespace ADDON;
 using namespace PLATFORM;
 
+cVNSIData::SMessage &
+cVNSIData::Queue::Enqueue(uint32_t serial)
+{
+  m_mutex.Lock();
+  SMessage &message(m_queue[serial]);
+  m_mutex.Unlock();
+  return message;
+}
+
+std::unique_ptr<cResponsePacket>
+cVNSIData::Queue::Dequeue(uint32_t serial, SMessage &message)
+{
+  m_mutex.Lock();
+  auto vresp = std::move(message.pkt);
+  m_queue.erase(serial);
+  m_mutex.Unlock();
+
+  return vresp;
+}
+
+void
+cVNSIData::Queue::Set(std::unique_ptr<cResponsePacket> &&vresp)
+{
+  CLockObject lock(m_mutex);
+  SMessages::iterator it = m_queue.find(vresp->getRequestID());
+  if (it != m_queue.end()) {
+    it->second.pkt = std::move(vresp);
+    it->second.event.Broadcast();
+  }
+}
+
 cVNSIData::cVNSIData()
 {
 }
@@ -85,33 +116,15 @@ void cVNSIData::OnReconnect()
 
 std::unique_ptr<cResponsePacket> cVNSIData::ReadResult(cRequestPacket* vrp)
 {
-  m_mutex.Lock();
-
-  SMessage &message(m_queue[vrp->getSerial()]);
+  SMessage &message = m_queue.Enqueue(vrp->getSerial());
 
-  m_mutex.Unlock();
-
-  if(!cVNSISession::TransmitMessage(vrp))
-  {
-    CLockObject lock(m_mutex);
-    m_queue.erase(vrp->getSerial());
-    return NULL;
-  }
-
-  if (!message.event.Wait(g_iConnectTimeout * 1000))
+  if (cVNSISession::TransmitMessage(vrp) &&
+      !message.event.Wait(g_iConnectTimeout * 1000))
   {
     XBMC->Log(LOG_ERROR, "%s - request timed out after %d seconds", __FUNCTION__, g_iConnectTimeout);
   }
 
-  m_mutex.Lock();
-
-  auto vresp = std::move(message.pkt);
-
-  m_queue.erase(vrp->getSerial());
-
-  m_mutex.Unlock();
-
-  return vresp;
+  return m_queue.Dequeue(vrp->getSerial(), message);
 }
 
 bool cVNSIData::GetDriveSpace(long long *total, long long *used)
@@ -871,13 +884,7 @@ void *cVNSIData::Process()
     // CHANNEL_REQUEST_RESPONSE
     if (vresp->getChannelID() == VNSI_CHANNEL_REQUEST_RESPONSE)
     {
-      CLockObject lock(m_mutex);
-      SMessages::iterator it = m_queue.find(vresp->getRequestID());
-      if (it != m_queue.end())
-      {
-        it->second.pkt = std::move(vresp);
-        it->second.event.Broadcast();
-      }
+      m_queue.Set(std::move(vresp));
     }
 
     // CHANNEL_STATUS
diff --git a/src/VNSIData.h b/src/VNSIData.h
index 7f4ffe8..897cad1 100644
--- a/src/VNSIData.h
+++ b/src/VNSIData.h
@@ -88,9 +88,20 @@ private:
     PLATFORM::CEvent event;
     std::unique_ptr<cResponsePacket> pkt;
   };
-  typedef std::map<int, SMessage> SMessages;
 
-  SMessages        m_queue;
+  class Queue {
+    typedef std::map<int, SMessage> SMessages;
+    SMessages m_queue;
+    PLATFORM::CMutex m_mutex;
+
+  public:
+    SMessage &Enqueue(uint32_t serial);
+    std::unique_ptr<cResponsePacket> Dequeue(uint32_t serial,
+                                             SMessage &message);
+    void Set(std::unique_ptr<cResponsePacket> &&vresp);
+  };
+
+  Queue m_queue;
+
   std::string      m_videodir;
-  PLATFORM::CMutex m_mutex;
 };

-- 
kodi-pvr-vdr-vnsi packaging



More information about the pkg-multimedia-commits mailing list