From 711b4ab9ae67ede8a8739397465809c3a3d67e9b Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 25 Aug 2014 13:07:14 -0400 Subject: [PATCH] fixed race condition --- Garlic.cpp | 4 ++++ Garlic.h | 2 ++ 2 files changed, 6 insertions(+) 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