From 336cd6092021de60c8303272781b279cd02aa829 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 15 Nov 2016 12:17:21 -0500 Subject: [PATCH] don't insert same floodfill twice --- NetDb.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/NetDb.cpp b/NetDb.cpp index e667dc11..5a622441 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -188,23 +188,34 @@ namespace data // TODO: check if floodfill has been changed } else + { LogPrint (eLogDebug, "NetDb: RouterInfo is older: ", ident.ToBase64()); - + updated = false; + } } else { r = std::make_shared (buf, len); if (!r->IsUnreachable ()) { - LogPrint (eLogInfo, "NetDb: RouterInfo added: ", ident.ToBase64()); + bool inserted = false; { std::unique_lock l(m_RouterInfosMutex); - m_RouterInfos[r->GetIdentHash ()] = r; + inserted = m_RouterInfos.insert ({r->GetIdentHash (), r}).second; } - if (r->IsFloodfill () && r->IsReachable ()) // floodfill must be reachable + if (inserted) + { + LogPrint (eLogInfo, "NetDb: RouterInfo added: ", ident.ToBase64()); + if (r->IsFloodfill () && r->IsReachable ()) // floodfill must be reachable + { + std::unique_lock l(m_FloodfillsMutex); + m_Floodfills.push_back (r); + } + } + else { - std::unique_lock l(m_FloodfillsMutex); - m_Floodfills.push_back (r); + LogPrint (eLogWarning, "NetDb: Duplicated RouterInfo ", ident.ToBase64()); + updated = false; } } else