From 725ca7a4d6f5d6939d4e8fa58fc021225c1ab736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20D=C3=A9saulniers?= <rostydela@gmail.com> Date: Mon, 16 Nov 2015 22:15:06 -0500 Subject: [PATCH] only remove Announce upon value expiration time --- src/dht.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dht.cpp b/src/dht.cpp index fadb695f..bc4edf7a 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -1407,7 +1407,7 @@ Dht::announce(const InfoHash& id, sa_family_t af, std::shared_ptr<Value> value, return a.value->id == value->id; }); if (a_sr == sr->announce.end()) - sr->announce.emplace_back(Announce {value, created, callback}); + sr->announce.emplace_back(Announce {value, std::min(now, created), callback}); else { if (a_sr->value != value) { a_sr->value = value; @@ -2529,12 +2529,15 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc auto a_to_remove = std::remove_if(sr->announce.begin(), sr->announce.end(), [&](Announce &a) { if (!a.value || a.value->id != msg.value_id) return false; - if (sr->isAnnounced(msg.value_id, getType(a.value->type), now)) { + auto type = getType(a.value->type); + if (sr->isAnnounced(msg.value_id, type, now)) { if (a.callback) { a.callback(true, sr->getNodes()); a.callback = nullptr; } - return true; + if (a.created + type.expiration < now) { + return true; + } } return false; }); -- GitLab