std::shared_ptr wait_and_pop()

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;
    }