in src/outmdsd/ConcurrentQueue.h [91:101]
std::shared_ptr<T> wait_and_pop()
{
std::unique_lock<std::mutex> lk(mut);
data_cond.wait(lk,[this]{return (!data_queue.empty() || stopOnceEmpty);});
if (data_queue.empty() && stopOnceEmpty) {
return nullptr;
}
std::shared_ptr<T> res(std::make_shared<T>(data_queue.front()));
data_queue.pop();
return res;
}