From 0e8bdf8299d9dcf1e050df59f9734a8f1cbb104e Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 9 Jun 2015 22:14:31 -0400 Subject: [PATCH] fixed race condition --- RouterContext.cpp | 12 ++++++++++++ RouterContext.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/RouterContext.cpp b/RouterContext.cpp index d2659016..495f1181 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -299,6 +299,18 @@ namespace i2p i2p::HandleI2NPMessage (CreateI2NPMessage (buf, GetI2NPMessageLength (buf), from)); } + void RouterContext::ProcessGarlicMessage (I2NPMessage * msg) + { + std::unique_lock l(m_GarlicMutex); + i2p::garlic::GarlicDestination::ProcessGarlicMessage (msg); + } + + void RouterContext::ProcessDeliveryStatusMessage (I2NPMessage * msg) + { + std::unique_lock l(m_GarlicMutex); + i2p::garlic::GarlicDestination::ProcessDeliveryStatusMessage (msg); + } + uint32_t RouterContext::GetUptime () const { return i2p::util::GetSecondsSinceEpoch () - m_StartupTime; diff --git a/RouterContext.h b/RouterContext.h index 9f6cd00b..840d75ad 100644 --- a/RouterContext.h +++ b/RouterContext.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -75,6 +76,10 @@ namespace i2p std::shared_ptr GetLeaseSet () { return nullptr; }; std::shared_ptr GetTunnelPool () const; void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr from); + + // override GarlicDestination + void ProcessGarlicMessage (I2NPMessage * msg); + void ProcessDeliveryStatusMessage (I2NPMessage * msg); private: @@ -93,6 +98,7 @@ namespace i2p bool m_AcceptsTunnels, m_IsFloodfill; uint64_t m_StartupTime; // in seconds since epoch RouterStatus m_Status; + std::mutex m_GarlicMutex; }; extern RouterContext context;