diff --git a/server/serverSession.cpp b/server/serverSession.cpp index 6451ecd6..93516d95 100644 --- a/server/serverSession.cpp +++ b/server/serverSession.cpp @@ -48,7 +48,7 @@ void ServerSession::add(shared_ptr message) bool ServerSession::send(BaseMessage* message) { -// std::unique_lock mlock(mutex_); + std::unique_lock mlock(mutex_); //cout << "send: " << message->type << ", size: " << message->getSize() << "\n"; if (!connected()) return false; @@ -110,17 +110,18 @@ void ServerSession::writer() { boost::asio::streambuf streambuf; std::ostream stream(&streambuf); - for (;;) + shared_ptr message; + while (active_) { - shared_ptr message(messages.pop()); - send(message.get()); + if (messages.try_pop(message, std::chrono::milliseconds(500))) + send(message.get()); } } catch (std::exception& e) { std::cerr << "Exception in thread: " << e.what() << "\n"; - active_ = false; } + active_ = false; } diff --git a/server/serverSession.h b/server/serverSession.h index a9ba03af..d14333ce 100644 --- a/server/serverSession.h +++ b/server/serverSession.h @@ -51,6 +51,7 @@ protected: void writer(); std::atomic active_; + mutable std::mutex mutex_; std::thread* readerThread; std::thread* writerThread; std::shared_ptr socket;