From ff856d2f201b155a81591abd8a21e77fa96bf208 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 12 Jan 2015 12:15:54 -0500 Subject: [PATCH] fixed race condition --- NTCPSession.cpp | 7 +++++++ NTCPSession.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/NTCPSession.cpp b/NTCPSession.cpp index 870d67df..435d0ace 100644 --- a/NTCPSession.cpp +++ b/NTCPSession.cpp @@ -751,17 +751,24 @@ namespace transport void NTCPServer::AddNTCPSession (std::shared_ptr session) { if (session) + { + std::unique_lock l(m_NTCPSessionsMutex); m_NTCPSessions[session->GetRemoteIdentity ().GetIdentHash ()] = session; + } } void NTCPServer::RemoveNTCPSession (std::shared_ptr session) { if (session) + { + std::unique_lock l(m_NTCPSessionsMutex); m_NTCPSessions.erase (session->GetRemoteIdentity ().GetIdentHash ()); + } } std::shared_ptr NTCPServer::FindNTCPSession (const i2p::data::IdentHash& ident) { + std::unique_lock l(m_NTCPSessionsMutex); auto it = m_NTCPSessions.find (ident); if (it != m_NTCPSessions.end ()) return it->second; diff --git a/NTCPSession.h b/NTCPSession.h index 6938f0ae..16d4e11d 100644 --- a/NTCPSession.h +++ b/NTCPSession.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -167,6 +168,7 @@ namespace transport boost::asio::io_service m_Service; boost::asio::io_service::work m_Work; boost::asio::ip::tcp::acceptor * m_NTCPAcceptor, * m_NTCPV6Acceptor; + std::mutex m_NTCPSessionsMutex; std::map > m_NTCPSessions; public: