From cd8e9e59fa75476aae649af1e065488665855b65 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 3 Feb 2015 16:14:33 -0500 Subject: [PATCH] don't request same RouterInfo twice --- NetDb.cpp | 11 ++++++++++- NetDb.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NetDb.cpp b/NetDb.cpp index 35377e99..ff166746 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -455,7 +455,16 @@ namespace data // request RouterInfo directly RequestedDestination * dest = CreateRequestedDestination (destination, false); if (requestComplete) - dest->SetRequestComplete (requestComplete); + { + if (dest->IsRequestComplete ()) // if set already + { + LogPrint (eLogWarning, "Destination ", destination.ToBase64(), " is requested already"); + requestComplete (nullptr); // TODO: implement it better + return; + } + else + dest->SetRequestComplete (requestComplete); + } auto floodfill = GetClosestFloodfill (destination, dest->GetExcludedPeers ()); if (floodfill) transports.SendMessage (floodfill->GetIdentHash (), dest->CreateRequestMessage (floodfill->GetIdentHash ())); diff --git a/NetDb.h b/NetDb.h index 2c00d3c0..a1287d63 100644 --- a/NetDb.h +++ b/NetDb.h @@ -42,6 +42,7 @@ namespace data I2NPMessage * CreateRequestMessage (const IdentHash& floodfill); void SetRequestComplete (const RequestComplete& requestComplete) { m_RequestComplete = requestComplete; }; + bool IsRequestComplete () const { return m_RequestComplete != nullptr; }; void Success (std::shared_ptr r); void Fail ();