From dba355eccd01398cba53c43878cf4766f2b11008 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 23 Sep 2016 13:15:08 -0400 Subject: [PATCH] use atomic_store for addresses' list re-assignment --- RouterInfo.cpp | 12 +++++++----- RouterInfo.h | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 9b2a4195..68c238ff 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -3,6 +3,8 @@ #include "I2PEndian.h" #include #include +#include +#include #include "version.h" #include "Crypto.h" #include "Base.h" @@ -17,14 +19,14 @@ namespace data { RouterInfo::RouterInfo (): m_Buffer (nullptr) { - m_Addresses = std::make_shared(); // create empty list + m_Addresses = boost::make_shared(); // create empty list } RouterInfo::RouterInfo (const std::string& fullPath): m_FullPath (fullPath), m_IsUpdated (false), m_IsUnreachable (false), m_SupportedTransports (0), m_Caps (0) { - m_Addresses = std::make_shared(); // create empty list + m_Addresses = boost::make_shared(); // create empty list m_Buffer = new uint8_t[MAX_RI_BUFFER_SIZE]; ReadFromFile (); } @@ -32,7 +34,7 @@ namespace data RouterInfo::RouterInfo (const uint8_t * buf, int len): m_IsUpdated (true), m_IsUnreachable (false), m_SupportedTransports (0), m_Caps (0) { - m_Addresses = std::make_shared(); // create empty list + m_Addresses = boost::make_shared(); // create empty list m_Buffer = new uint8_t[MAX_RI_BUFFER_SIZE]; memcpy (m_Buffer, buf, len); m_BufferLen = len; @@ -154,7 +156,7 @@ namespace data s.read ((char *)&m_Timestamp, sizeof (m_Timestamp)); m_Timestamp = be64toh (m_Timestamp); // read addresses - auto addresses = std::make_shared(); + auto addresses = boost::make_shared(); uint8_t numAddresses; s.read ((char *)&numAddresses, sizeof (numAddresses)); if (!s) return; bool introducers = false; @@ -255,7 +257,7 @@ namespace data m_SupportedTransports |= supportedTransports; } } - m_Addresses = addresses; + boost::atomic_store (&m_Addresses, addresses); // read peers uint8_t numPeers; s.read ((char *)&numPeers, sizeof (numPeers)); if (!s) return; diff --git a/RouterInfo.h b/RouterInfo.h index f4c077ef..e8a4ea75 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -8,6 +8,7 @@ #include #include #include +#include #include "Identity.h" #include "Profiling.h" @@ -201,7 +202,7 @@ namespace data uint8_t * m_Buffer; size_t m_BufferLen; uint64_t m_Timestamp; - std::shared_ptr m_Addresses; + boost::shared_ptr m_Addresses; // TODO: use std::shared_ptr and std::atomic_store for gcc >= 4.9 std::map m_Properties; bool m_IsUpdated, m_IsUnreachable; uint8_t m_SupportedTransports, m_Caps;