summaryrefslogtreecommitdiff
path: root/src/thread/queue.cpp
blob: d2ed7d2dc8ca2b6df0b510a035660f10ab7fed38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "queue.hpp"

namespace smtp::thread
{
    void Queue::Push( Message const &message)
    {
        std::lock_guard<std::mutex> lock{mMutex};
        mMessageQueue.push( message );
        mCondition.notify_one();
    }

    std::shared_ptr<Message> Queue::WaitAndPop()
    {
        std::unique_lock<std::mutex> lock{mMutex};
        mCondition.wait(lock, [this](){return !mMessageQueue.empty();});
        auto result = std::make_shared<Message>(mMessageQueue.front());
        mMessageQueue.pop();
        return result;
    }

}