diff --git a/Garlic.cpp b/Garlic.cpp index db50b627..ef894b67 100644 --- a/Garlic.cpp +++ b/Garlic.cpp @@ -308,12 +308,16 @@ namespace garlic if (!session) { session = new GarlicRoutingSession (&destination, 32); + std::unique_lock l(m_SessionsMutex); m_Sessions[destination.GetIdentHash ()] = session; } I2NPMessage * ret = session->WrapSingleMessage (msg, leaseSet); if (!session->GetNextTag ()) // tags have beed recreated + { + std::unique_lock l(m_SessionsMutex); m_CreatedSessions[session->GetFirstMsgID ()] = session; + } return ret; } diff --git a/Garlic.h b/Garlic.h index e1259508..c120ae37 100644 --- a/Garlic.h +++ b/Garlic.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "aes.h" #include "I2NPProtocol.h" @@ -121,6 +122,7 @@ namespace garlic std::thread * m_Thread; i2p::util::Queue m_Queue; // outgoing sessions + std::mutex m_SessionsMutex; std::map m_Sessions; std::map m_CreatedSessions; // msgID -> session // incoming session