From c6b2ce93c4df7bef702c07a8f0984afe8c4fd879 Mon Sep 17 00:00:00 2001 From: orignal Date: Sat, 1 Jan 2022 15:12:59 -0500 Subject: [PATCH] Memory pool for RouterInfo address --- libi2pd/NetDb.cpp | 12 ++++++------ libi2pd/NetDb.hpp | 4 +++- libi2pd/RouterInfo.cpp | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/libi2pd/NetDb.cpp b/libi2pd/NetDb.cpp index 97b803b4..6e586956 100644 --- a/libi2pd/NetDb.cpp +++ b/libi2pd/NetDb.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2013-2021, The PurpleI2P Project +* Copyright (c) 2013-2022, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * @@ -596,10 +596,9 @@ namespace data { if (it.second == own) continue; // skip own std::string ident = it.second->GetIdentHashBase64(); - std::string path = m_Storage.Path(ident); if (it.second->IsUpdated ()) { - it.second->SaveToFile (path); + it.second->SaveToFile (m_Storage.Path(ident)); it.second->SetUpdated (false); it.second->SetUnreachable (false); it.second->DeleteBuffer (); @@ -630,6 +629,9 @@ namespace data } } // m_RouterInfos iteration + m_RouterInfoBuffersPool.CleanUpMt (); + m_RouterInfoAddressesPool.CleanUpMt (); + if (updatedCount > 0) LogPrint (eLogInfo, "NetDb: Saved ", updatedCount, " new/updated routers"); if (deletedCount > 0) @@ -658,9 +660,7 @@ namespace data else ++it; } - } - - m_RouterInfoBuffersPool.CleanUpMt (); + } } void NetDb::RequestDestination (const IdentHash& destination, RequestedDestination::RequestComplete requestComplete, bool direct) diff --git a/libi2pd/NetDb.hpp b/libi2pd/NetDb.hpp index f4f7a097..c2369f5e 100644 --- a/libi2pd/NetDb.hpp +++ b/libi2pd/NetDb.hpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2013-2021, The PurpleI2P Project +* Copyright (c) 2013-2022, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * @@ -122,6 +122,7 @@ namespace data void ClearRouterInfos () { m_RouterInfos.clear (); }; std::shared_ptr NewRouterInfoBuffer () { return m_RouterInfoBuffersPool.AcquireSharedMt (); }; + std::shared_ptr NewRouterInfoAddress () { return m_RouterInfoAddressesPool.AcquireSharedMt (); }; uint32_t GetPublishReplyToken () const { return m_PublishReplyToken; }; @@ -179,6 +180,7 @@ namespace data uint32_t m_PublishReplyToken = 0; i2p::util::MemoryPoolMt m_RouterInfoBuffersPool; + i2p::util::MemoryPoolMt m_RouterInfoAddressesPool; }; extern NetDb netdb; diff --git a/libi2pd/RouterInfo.cpp b/libi2pd/RouterInfo.cpp index 2e294356..f730086d 100644 --- a/libi2pd/RouterInfo.cpp +++ b/libi2pd/RouterInfo.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2013-2021, The PurpleI2P Project +* Copyright (c) 2013-2022, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * @@ -205,7 +205,7 @@ namespace data for (int i = 0; i < numAddresses; i++) { uint8_t supportedTransports = 0; - auto address = std::make_shared
(); + auto address = netdb.NewRouterInfoAddress (); uint8_t cost; // ignore s.read ((char *)&cost, sizeof (cost)); s.read ((char *)&address->date, sizeof (address->date));