linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06212
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3099: replace the dev plugin's mutex by a lock-free queue
------------------------------------------------------------
revno: 3099
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Tue 2012-10-30 19:48:58 +0100
message:
replace the dev plugin's mutex by a lock-free queue
modified:
plugins/Dev/Dialog.cpp
plugins/Dev/Dialog.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'plugins/Dev/Dialog.cpp'
--- plugins/Dev/Dialog.cpp 2012-10-29 18:19:03 +0000
+++ plugins/Dev/Dialog.cpp 2012-10-30 18:48:58 +0000
@@ -36,6 +36,7 @@
Dialog::Dialog() :
hwnd(nullptr),
+ messages(1024),
counter(0),
scroll(true),
hubMessages(true),
@@ -68,8 +69,7 @@
void Dialog::write(bool hubOrUser, bool sending, string ip, string peer, string message) {
Message msg = { hubOrUser, sending, move(ip), move(peer), move(message) };
- Lock l(mutex);
- messages.push_back(move(msg));
+ messages.push(msg);
}
void Dialog::close() {
@@ -148,20 +148,13 @@
}
void Dialog::timer() {
- decltype(messages) messages_;
- {
- Lock l(mutex);
- messages_.swap(messages);
- }
- if(messages_.empty()) {
- return;
- }
-
auto control = GetDlgItem(hwnd, IDC_MESSAGES);
LVITEM lvi = { 0 };
- for(auto& message: messages_) {
+ Message message;
+ while(messages.pop(message)) {
+
if(!(message.hubOrUser ? hubMessages : userMessages)) {
continue;
}
=== modified file 'plugins/Dev/Dialog.h'
--- plugins/Dev/Dialog.h 2012-10-29 18:19:03 +0000
+++ plugins/Dev/Dialog.h 2012-10-30 18:48:58 +0000
@@ -20,19 +20,13 @@
#define PLUGINS_DEV_DIALOG_H
#include <unordered_set>
-#include <vector>
+#include <boost/lockfree/queue.hpp>
#include <boost/regex.hpp>
-#include <CriticalSection.h>
-
using std::move;
using std::string;
using std::unordered_set;
-using std::vector;
-
-using dcpp::CriticalSection;
-using dcpp::Lock;
class Dialog
{
@@ -65,9 +59,7 @@
// store the messages to be displayed here; process them with a timer.
struct Message { bool hubOrUser; bool sending; string ip; string peer; string message; };
- vector<Message> messages;
-
- CriticalSection mutex;
+ boost::lockfree::queue<Message> messages;
uint16_t counter;
bool scroll;