summaryrefslogtreecommitdiff
path: root/lib/buffer_queue_pool.cpp
diff options
context:
space:
mode:
authorJosh Blum2012-12-16 02:02:49 -0800
committerJosh Blum2012-12-16 02:02:49 -0800
commit36b746eb1c43068b999fa56d52aa0d8994dd6ef9 (patch)
tree498f270aa5052926ee78f42bd2bf2d3311a98046 /lib/buffer_queue_pool.cpp
parentdb2933a31db9983cc24d925f5b86db43a466ad36 (diff)
downloadsandhi-36b746eb1c43068b999fa56d52aa0d8994dd6ef9.tar.gz
sandhi-36b746eb1c43068b999fa56d52aa0d8994dd6ef9.tar.bz2
sandhi-36b746eb1c43068b999fa56d52aa0d8994dd6ef9.zip
various fixes for unit tests pass
Diffstat (limited to 'lib/buffer_queue_pool.cpp')
-rw-r--r--lib/buffer_queue_pool.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/buffer_queue_pool.cpp b/lib/buffer_queue_pool.cpp
index a2a4c28..7a531a4 100644
--- a/lib/buffer_queue_pool.cpp
+++ b/lib/buffer_queue_pool.cpp
@@ -8,12 +8,19 @@ using namespace gras;
struct BufferQueuePool : BufferQueue
{
- BufferQueuePool(const size_t num):
+ BufferQueuePool(const SBufferConfig &config, const size_t num):
+ token(config.token), //save config, its holds token
queue(boost::circular_buffer<SBuffer>(num))
{
//NOP
}
+ ~BufferQueuePool(void)
+ {
+ token.reset();
+ queue.clear();
+ }
+
SBuffer &front(void)
{
ASSERT(not queue.empty());
@@ -24,13 +31,12 @@ struct BufferQueuePool : BufferQueue
void pop(void)
{
ASSERT(not queue.empty());
- queue.front() = SBuffer(); //dont hold ref
+ queue.front().reset(); //dont hold ref
queue.pop_front();
}
void push(const SBuffer &buff)
{
- ASSERT(buff);
queue.push_back(buff);
}
@@ -39,6 +45,7 @@ struct BufferQueuePool : BufferQueue
return queue.empty();
}
+ SBufferToken token;
boost::circular_buffer<SBuffer> queue;
};
@@ -47,12 +54,14 @@ BufferQueueSptr BufferQueue::make_pool(
const SBufferConfig &config,
const size_t num_buffs
){
- BufferQueueSptr bq(new BufferQueuePool(num_buffs));
+ BufferQueueSptr queue(new BufferQueuePool(config, num_buffs));
+
for (size_t i = 0; i < num_buffs; i++)
{
SBuffer buff(config);
std::memset(buff.get_actual_memory(), 0, buff.get_actual_length());
//bq->push(buff);
}
- return bq;
+
+ return queue;
}