[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