aboutsummaryrefslogtreecommitdiff
path: root/src/httpserver.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2016-04-28 19:03:05 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2016-05-05 08:27:12 +0200
commit091d6e04998d2c88dd7f42ad2d90929f428764c2 (patch)
tree184e6365e0b241bdfebe65c0d41ff752ca298945 /src/httpserver.cpp
parent8206835cc173e4145634ed660fe2e0e44bd05bc9 (diff)
downloadbitcoin-091d6e04998d2c88dd7f42ad2d90929f428764c2.tar.xz
http: Do a pending c++11 simplification
Use std::unique_ptr for handling work items. This makes the code more RAII and, as mentioned in the comment, is what I planned when I wrote the code in the first place.
Diffstat (limited to 'src/httpserver.cpp')
-rw-r--r--src/httpserver.cpp16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/httpserver.cpp b/src/httpserver.cpp
index a98eff7c16..8297b6f758 100644
--- a/src/httpserver.cpp
+++ b/src/httpserver.cpp
@@ -71,8 +71,7 @@ private:
/** Mutex protects entire object */
CWaitableCriticalSection cs;
CConditionVariable cond;
- /* XXX in C++11 we can use std::unique_ptr here and avoid manual cleanup */
- std::deque<WorkItem*> queue;
+ std::deque<std::unique_ptr<WorkItem>> queue;
bool running;
size_t maxDepth;
int numThreads;
@@ -101,15 +100,11 @@ public:
numThreads(0)
{
}
- /*( Precondition: worker threads have all stopped
+ /** Precondition: worker threads have all stopped
* (call WaitExit)
*/
~WorkQueue()
{
- while (!queue.empty()) {
- delete queue.front();
- queue.pop_front();
- }
}
/** Enqueue a work item */
bool Enqueue(WorkItem* item)
@@ -118,7 +113,7 @@ public:
if (queue.size() >= maxDepth) {
return false;
}
- queue.push_back(item);
+ queue.emplace_back(std::unique_ptr<WorkItem>(item));
cond.notify_one();
return true;
}
@@ -127,18 +122,17 @@ public:
{
ThreadCounter count(*this);
while (running) {
- WorkItem* i = 0;
+ std::unique_ptr<WorkItem> i;
{
boost::unique_lock<boost::mutex> lock(cs);
while (running && queue.empty())
cond.wait(lock);
if (!running)
break;
- i = queue.front();
+ i = std::move(queue.front());
queue.pop_front();
}
(*i)();
- delete i;
}
}
/** Interrupt and exit loops */