ActorProtocol: implement purge of specific messages from the queue
authorRainer Hochecker <fernetmenta@online.de>
Tue, 18 Feb 2014 06:53:38 +0000 (07:53 +0100)
committerRainer Hochecker <fernetmenta@online.de>
Thu, 20 Feb 2014 19:31:20 +0000 (20:31 +0100)
xbmc/utils/ActorProtocol.cpp
xbmc/utils/ActorProtocol.h

index ac5b5eb..9ea07bd 100644 (file)
@@ -251,3 +251,47 @@ void Protocol::Purge()
   while (ReceiveOutMessage(&msg))
     msg->Release();
 }
+
+void Protocol::PurgeIn(int signal)
+{
+  Message *msg;
+  std::queue<Message*> msgs;
+
+  CSingleLock lock(criticalSection);
+
+  while (!inMessages.empty())
+  {
+    msg = inMessages.front();
+    inMessages.pop();
+    if (msg->signal != signal)
+      msgs.push(msg);
+  }
+  while (!msgs.empty())
+  {
+    msg = msgs.front();
+    msgs.pop();
+    inMessages.push(msg);
+  }
+}
+
+void Protocol::PurgeOut(int signal)
+{
+  Message *msg;
+  std::queue<Message*> msgs;
+
+  CSingleLock lock(criticalSection);
+
+  while (!outMessages.empty())
+  {
+    msg = outMessages.front();
+    outMessages.pop();
+    if (msg->signal != signal)
+      msgs.push(msg);
+  }
+  while (!msgs.empty())
+  {
+    msg = msgs.front();
+    msgs.pop();
+    outMessages.push(msg);
+  }
+}
index 336da06..100b1ac 100644 (file)
@@ -69,6 +69,8 @@ public:
   bool ReceiveOutMessage(Message **msg);
   bool ReceiveInMessage(Message **msg);
   void Purge();
+  void PurgeIn(int signal);
+  void PurgeOut(int signal);
   void DeferIn(bool value) {inDefered = value;};
   void DeferOut(bool value) {outDefered = value;};
   void Lock() {criticalSection.lock();};