new(userspace/falco): implement the output queue methods directly

Co-Authored-By: Leonardo Di Donato <leodidonato@gmail.com>
Signed-off-by: Lorenzo Fontana <lo@linux.com>
This commit is contained in:
Lorenzo Fontana 2019-09-06 18:16:35 +02:00 committed by Leo Di Donato
parent 43cd429967
commit 0a9f61f0fb
2 changed files with 11 additions and 7 deletions

View File

@ -32,9 +32,14 @@ public:
return instance;
}
falco_output_response_cq queue()
bool try_pop(falco_output_response& res)
{
return m_queue;
return m_queue.try_pop(res);
}
void push(falco_output_response& res)
{
m_queue.push(res);
}
private:
@ -48,4 +53,4 @@ private:
public:
falco_output_queue(falco_output_queue const&) = delete;
void operator=(falco_output_queue const&) = delete;
};
};

View File

@ -37,18 +37,17 @@ void falco_grpc_server_impl::subscribe(const stream_context& ctx, const falco_ou
}
else
{
auto m_event_queue = falco_output_queue::get().queue();
// Start (or continue) streaming
// ctx.m_status == stream_context::STREAMING
if(m_event_queue.try_pop(res) && !req.keepalive())
if(falco_output_queue::get().try_pop(res) && !req.keepalive())
{
ctx.m_has_more = true;
return;
}
while(!m_event_queue.try_pop(res) && req.keepalive())
while(!falco_output_queue::get().try_pop(res) && req.keepalive())
{
}
ctx.m_has_more = req.keepalive();
}
}
}